不确定如何在集合上运行Where以返回集合

本文关键字:集合 Where 返回 运行 不确定 | 更新日期: 2023-09-27 18:18:04

假设我有一个名为Foo1的MyCollection类实例。MyCollection基本上是MyClass的集合。不知道我怎么能做下面的东西有或没有cast?

MyCollection Foo2 =  Foo1.Where( r => r.LastName == “SomeName”)

注意:MyCollection &MyClass来自第三方库。我可能可以创建扩展方法,但希望有一些简单的方法来做到这一点。

不确定如何在集合上运行Where以返回集合

您可以实现IEnumerable<MyClass>,并且在实现中仅枚举内部集合。这会自动显示所有linq到对象的扩展方法(可枚举类方法)。

public class MyCollection : IEnumerable<MyClass>

如果你想有一个新的MyCollection实例,只包含那些满足条件的元素,你可以在你的类上创建一个Where方法。

或者,您可以依赖于IEnumerable<T>上的linq扩展方法(假设您的类实现了IEnumerable<MyClass>),并使用您通常用于从MyClass对象序列填充MyCollection的任何方法。

编辑

linq扩展方法的示例:

    确保MyCollection执行IEnumerable<MyClass>
  • 确保MyCollection有一个接受IEnumerable<MyClass>的构造函数
  • 包含#using System.Linq;
  • 示例语句:MyCollection Foo2 = new MyCollection(Foo1.Where( r => r.LastName == “SomeName”));

编辑编辑

我现在看到MyClass和MyCollection是第三方类型。从"我的"那部分我以为你是自己设计的。

MyCollection类型几乎肯定实现了IEnumerable<MyClass>——如果没有,它可能实现了非泛型的IEnumerable。在这种情况下,可以使用Cast<T>扩展方法。如果它没有实现任何接口,那么第三方库在某种程度上是缺乏的。

只要MyCollection实现了IEnumerable或IQueryable, Where方法就可以工作,并将返回匹配元素的子集。即LastName == "SomeProperty"的元素。

只要MyCollection实现了IEnumerable<MyClass>IQueryable<MyClass>,就不需要强制转换。