Another way using Linq extension methods
public ObjectId[] SelByTag(string tag)
{
Document doc = AcAp.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
tag = tag.ToUpper();
TypedValue[] filter = new TypedValue[2] { new TypedValue(0, "INSERT"), new TypedValue(66, 1) };
PromptSelectionResult psr = ed.GetSelection(new SelectionFilter(filter));
if (psr.Status != PromptStatus.OK) return null;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
return psr
.Value
.GetObjectIds()
.Where(brId => ((BlockReference)tr.GetObject(brId, OpenMode.ForRead))
.AttributeCollection
.Cast<ObjectId>()
.Any(attId => ((AttributeReference)tr.GetObject(attId, OpenMode.ForRead))
.Tag == tag))
.ToArray();
}
}