如果您有两个对象,ObjectA和ObjectB都继承自AbstractObject和AbstractObject的集合。在我选择特定类型集合中的所有对象时,linq语句会是什么样子。恩。类似的东西:
var allBs = from b in collection where type == ObjectB select b;
答案 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;