假设我有一个名为Foo1的MyCollection类的实例。 MyCollection基本上是MyClass的集合。不知道如果有或没有演员,我怎么能做下面这样的事情呢?
MyCollection Foo2 = Foo1.Where( r => r.LastName == “SomeName”)
注意:MyCollection& MyClass来自第三方库。我可能可以在其上创建扩展方法,但希望有一些简单的方法。
答案 0 :(得分:3)
您可以实现IEnumerable<MyClass>
,并且在实现中只需枚举内部集合。这会自动显示所有LINQ到对象的扩展方法(Enumerable类方法)。
public class MyCollection : IEnumerable<MyClass>
答案 1 :(得分:2)
如果您希望MyCollection
的新实例仅包含符合条件的元素,则可以在班级上创建Where
方法。
或者,您可以依赖IEnumerable<T>
上的linq扩展方法(假设您的类实现IEnumerable<MyClass>
),并使用通常用于从序列中填充MyCollection
的任何方法MyClass
个对象。
修改强>
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>
扩展方法。如果它既没有实现接口,那么第三方库也有些缺乏。
答案 2 :(得分:0)
只要MyCollection实现IEnumerable或IQueryable,Where方法就可以工作,并返回匹配元素的子集。也就是说,具有LastName ==“SomeProperty”的元素。
只要MyCollection实现IEnumerable<MyClass>
或IQueryable<MyClass>
,就不需要强制转换。