0

我正在寻找关于如何为我的业务类创建 LINQ 访问器/API 的优秀教程。这样有人最终可以在程序中输入这样的内容——

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

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

4

2 回答 2

2

LINQ 是一个有趣的野兽。

讨论 LINQ 时立即IEnumerable<T>想到。这似乎IEnumerable<T> LINQ,但事实并非如此。IEnumerable<T>是 LINQ 方法的一种实现,它允许针对实现IEnumerable<T>.

另一个实现是IObservable<T>为 Microsoft 的响应式扩展提供支持。这是一组扩展,允许针对事件(或数据流)编写 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。

于 2012-11-26T07:16:11.867 回答
1

您只需要在您的类中实现IEnumerable 接口,然后您就可以使用 LINQ。
因为 LINQ 是IEnumerable对象的一组扩展

于 2012-11-26T05:21:26.893 回答