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

Linq 查询集合中的特定对象类型,linq,Linq,如果有两个对象,ObjectA和ObjectB都继承自AbstractObject和AbstractObject的集合。如果选择特定类型集合中的所有对象,linq语句会是什么样子。例如: var allBs = from b in collection where type == ObjectB select b; 您可以使用: 或者,或者: var allBs = from b in collection where b.GetType() == typeof(Ob

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

var allBs = from b in collection where type == ObjectB select b;
您可以使用:

或者,或者:

var allBs = from b in collection 
            where b.GetType() == typeof(ObjectB) 
            select b;
非常简单:

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

IEnumerable allBy=来自集合中的b
其中b是ObjectB
选择b;
第二个查询保留与集合相同的可枚举类型,第一个查询隐式强制转换为
IEnumerable

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

IEnumerable allBs=(来自集合中的b
其中b是ObjectB
选择b.Cast();
IEnumerable allBs=来自集合中的b
其中b是ObjectB
选择b作为ObjectB;
@“Reed Copsey”-我认为OP有点模棱两可,它是一个类型的所有对象,包括派生类型还是不包括派生类型。假设代码
b是ObjectB
返回true,即使
b
是从
ObjectB
派生出来的,我还是使用了“included”的意思。这就是你说的重点吗?
var allBs = from b in collection 
            where b.GetType() == typeof(ObjectB) 
            select b;
IEnumerable<ObjectB> allBs = collection.OfType<ObjectB>();
IEnumerable<AbstractObject> allBy = from b in collection
                                    where b is ObjectB
                                    select b;
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;