创建我自己的LINQ集合

创建我自己的LINQ集合,linq,Linq,我正在寻找关于如何为我的业务类创建LINQ访问器/API的好教程。这样最终有人可以在程序中输入类似的内容-- 我在.Net集合中经常使用LINQ,但在我自己的类中从未使用过。这只是实现IEnumerable的问题,还是还需要其他步骤?您只需要在类中实现,然后就可以使用LINQ了。 因为LINQ是IEnumerable对象的一组扩展,所以您只需要在类中实现,然后就可以使用LINQ了。 因为LINQ是IEnumerable对象的一组扩展LINQ是一个有趣的野兽 在讨论LINQ时,我立刻想到了IE

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


我在.Net集合中经常使用LINQ,但在我自己的类中从未使用过。这只是实现IEnumerable的问题,还是还需要其他步骤?

您只需要在类中实现,然后就可以使用LINQ了。

因为LINQ是
IEnumerable
对象的一组扩展

,所以您只需要在类中实现,然后就可以使用LINQ了。

因为LINQ是
IEnumerable
对象的一组扩展

LINQ是一个有趣的野兽

在讨论LINQ时,我立刻想到了
IEnumerable
。看起来,
IEnumerable
LINQ,但它不是
IEnumerable
是LINQ方法的一种实现,它允许针对实现
IEnumerable
的对象编写LINQ查询

另一个实现是
IObservable
,它支持微软的反应式扩展。这是一组扩展,允许针对事件(或数据流)编写LINQ查询。与
IEnumerable
无关

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

例如,定义类
A
B
如下:

public class A
{
    public B Select(Func<A, B> selector)
    {
        return selector(this);
    }
}

public class B
{
    public B(A a) { }
}
是林克,吉姆,但不是我们所知道的

所有LINQ运算符都可以这样定义。只要编译器能够看到具有正确签名的方法,你就是黄金


话虽如此,LINQ查询在处理一系列值时感觉很自然,因此这就是为什么
IEnumerable
IObservable
是LINQ运行的好例子。但是,只要实现正确的方法,就可以针对您喜欢的任何类型定义LINQ。

LINQ是一个有趣的野兽

在讨论LINQ时,我立刻想到了
IEnumerable
。看起来,
IEnumerable
LINQ,但它不是
IEnumerable
是LINQ方法的一种实现,它允许针对实现
IEnumerable
的对象编写LINQ查询

另一个实现是
IObservable
,它支持微软的反应式扩展。这是一组扩展,允许针对事件(或数据流)编写LINQ查询。与
IEnumerable
无关

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

例如,定义类
A
B
如下:

public class A
{
    public B Select(Func<A, B> selector)
    {
        return selector(this);
    }
}

public class B
{
    public B(A a) { }
}
是林克,吉姆,但不是我们所知道的

所有LINQ运算符都可以这样定义。只要编译器能够看到具有正确签名的方法,你就是黄金

话虽如此,LINQ查询在处理一系列值时感觉很自然,因此这就是为什么
IEnumerable
IObservable
是LINQ运行的好例子。但是,只要实现正确的方法,就可以根据您喜欢的任何类型定义LINQ。

LINQ不是
IEnumerable
对象的一组扩展。事实上,它甚至不是
IEnumerable
的一组扩展。你已经从头定义了它。应该是
IEnumerable
LINQ扩展实现了使用LINQ所需的方法。LINQ不是
IEnumerable
对象的一组扩展。事实上,它甚至不是
IEnumerable
的一组扩展。你已经从头定义了它。应该是
IEnumerable
LINQ扩展实现了使用LINQ所需的方法。
B query =
    from x in a
    select new B(x);