Linq 查询集合中的特定对象类型
如果有两个对象,ObjectA和ObjectB都继承自AbstractObject和AbstractObject的集合。如果选择特定类型集合中的所有对象,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
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;