我正在寻找有关如何为我的业务类创建LINQ访问器/ API的好教程。所以有人最终可以在程序中输入这样的东西 -
var potentialCustomers = from people in county
where people.NumberOfCats > 2
select people
我经常在.Net集合中使用LINQ,但以前从未在我自己的类上使用它。它只是实现IEnumerable的问题,还是需要额外的步骤?
答案 0 :(得分:2)
LINQ是一个有趣的野兽。
在讨论LINQ时会立即想到IEnumerable<T>
。似乎IEnumerable<T>
LINQ,但事实并非如此。 IEnumerable<T>
是LINQ方法的一个实现,它允许针对实现IEnumerable<T>
的对象编写LINQ查询。
另一个实现是IObservable<T>
,它支持Microsoft的Reactive Extensions。这是一组扩展,允许针对事件(或数据流)编写LINQ查询。与IEnumerable<T>
没有任何关系。
LINQ也可以直接写在你的对象中 - 它根本不必是扩展方法。
例如,定义类A
和B
,如下所示:
public class A
{
public B Select(Func<A, B> selector)
{
return selector(this);
}
}
public class B
{
public B(A a) { }
}
现在我可以写下这段代码:
B query =
from x in a
select new B(x);
这是LINQ,Jim,但不是我们所知道的。
可以通过这种方式定义所有LINQ运算符。只要编译器能够看到具有正确签名的方法,你就是金色的。
说过这个LINQ查询在处理一系列值时感觉很自然 - 因此这就是为什么IEnumerable<T>
和IObservable<T>
是LINQ的好例子。但是,通过实现正确的方法,肯定可以针对您喜欢的任何类型定义LINQ。
答案 1 :(得分:1)
您只需要在课程中实现IEnumerable interface,然后就可以使用LINQ了。
因为LINQ是IEnumerable
个对象的一组扩展