创建我自己的LINQ集合

时间:2012-11-26 04:44:07

标签: linq

我正在寻找有关如何为我的业务类创建LINQ访问器/ API的好教程。所以有人最终可以在程序中输入这样的东西 -

var potentialCustomers = from people in county
                  where people.NumberOfCats > 2
                  select people

我经常在.Net集合中使用LINQ,但以前从未在我自己的类上使用它。它只是实现IEnumerable的问题,还是需要额外的步骤?

2 个答案:

答案 0 :(得分:2)

LINQ是一个有趣的野兽。

在讨论LINQ时会立即想到IEnumerable<T>。似乎IEnumerable<T> LINQ,但事实并非如此。 IEnumerable<T>是LINQ方法的一个实现,它允许针对实现IEnumerable<T>的对象编写LINQ查询。

另一个实现是IObservable<T>,它支持Microsoft的Reactive Extensions。这是一组扩展,允许针对事件(或数据流)编写LINQ查询。与IEnumerable<T>没有任何关系。

LINQ也可以直接写在你的对象中 - 它根本不必是扩展方法。

例如,定义类AB,如下所示:

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个对象的一组扩展