查询集合中的特定对象类型

时间:2010-09-08 01:09:45

标签: linq

如果您有两个对象,ObjectA和ObjectB都继承自AbstractObject和AbstractObject的集合。在我选择特定类型集合中的所有对象时,linq语句会是什么样子。恩。类似的东西:

var allBs = from b in collection where type == ObjectB select b;

2 个答案:

答案 0 :(得分:5)

您可以使用Enumerable.OfType

var allBs = collection.OfType<ObjectB>();

这为您提供了类型为 castable ObjectB的所有元素。如果您想要的对象类型只有ObjectB

var allBs = collection.Select(i => i.GetType() == typeof(ObjectB));

或者,或者:

var allBs = from b in collection 
            where b.GetType() == typeof(ObjectB) 
            select b;

答案 1 :(得分:2)

很简单:

IEnumerable<ObjectB> allBs = collection.OfType<ObjectB>();

或者:

IEnumerable<AbstractObject> allBy = from b in collection
                                    where b is ObjectB
                                    select b;

第二个查询保留与集合相同的可枚举类型,第一个隐式转换为IEnumerable<ObjectB>

您可以使用这些替代方法将第二个查询转换为IEnumerable<ObjectB>

IEnumerable<ObjectB> allBs = (from b in collection
                              where b is ObjectB
                              select b).Cast<ObjectB>();

IEnumerable<ObjectB> allBs = from b in collection
                             where b is ObjectB
                             select b as ObjectB;