不确定如何在集合上运行Where以返回集合
本文关键字:集合 Where 返回 运行 不确定 | 更新日期: 2023-09-27 18:18:04
假设我有一个名为Foo1的MyCollection类实例。MyCollection基本上是MyClass的集合。不知道我怎么能做下面的东西有或没有cast?
MyCollection Foo2 = Foo1.Where( r => r.LastName == “SomeName”)
注意:MyCollection &MyClass来自第三方库。我可能可以创建扩展方法,但希望有一些简单的方法来做到这一点。
您可以实现IEnumerable<MyClass>
,并且在实现中仅枚举内部集合。这会自动显示所有linq到对象的扩展方法(可枚举类方法)。
public class MyCollection : IEnumerable<MyClass>
如果你想有一个新的MyCollection
实例,只包含那些满足条件的元素,你可以在你的类上创建一个Where
方法。
或者,您可以依赖于IEnumerable<T>
上的linq扩展方法(假设您的类实现了IEnumerable<MyClass>
),并使用您通常用于从MyClass
对象序列填充MyCollection
的任何方法。
编辑
linq扩展方法的示例:
- 确保
- 确保
MyCollection
有一个接受IEnumerable<MyClass>
的构造函数 - 包含
#using System.Linq;
- 示例语句:
MyCollection Foo2 = new MyCollection(Foo1.Where( r => r.LastName == “SomeName”))
;
MyCollection
执行IEnumerable<MyClass>
编辑编辑
我现在看到MyClass和MyCollection是第三方类型。从"我的"那部分我以为你是自己设计的。
MyCollection
类型几乎肯定实现了IEnumerable<MyClass>
——如果没有,它可能实现了非泛型的IEnumerable
。在这种情况下,可以使用Cast<T>
扩展方法。如果它没有实现任何接口,那么第三方库在某种程度上是缺乏的。
只要MyCollection实现了IEnumerable或IQueryable, Where方法就可以工作,并将返回匹配元素的子集。即LastName == "SomeProperty"的元素。
只要MyCollection实现了IEnumerable<MyClass>
或IQueryable<MyClass>
,就不需要强制转换。