c# - 仅使用扩展方法在 Linq 中进行漂亮、干净的交叉连接

标签 c# linq join extension-methods

<分区>

Possible Duplicate:
Nested “from” LINQ query expressed with extension methods

我确定之前有人问过这个问题,但老实说我找不到任何东西。

我很好奇以下仅使用内置 Linq 扩展方法的等效语法是什么:

var z1 =
    from x in xs
    from y in ys
    select new { x, y };

我可以得到相同的结果:

var z2 = xs.SelectMany(x => ys.Select(y => new { x, y }));

但是会产生不同的IL代码,而且代码有点绕口难懂。有没有更简洁的方法来使用扩展方法来做到这一点?


这是我编写的整个测试方法:

private void Test()
{
    var xs = new[] { 1D, 2D, 3D };
    var ys = new[] { 4D, 5D, 6D };

    var z1 =
        from x in xs
        from y in ys
        select new { x, y };

    var z2 = xs.SelectMany(x => ys.Select(y => new { x, y }));
}

这里是[编辑:C# interp] IL 代码(使用 ILSpy):

private void Test()
{
    double[] xs = new double[]
    {
        1.0, 
        2.0, 
        3.0
    };
    double[] ys = new double[]
    {
        4.0, 
        5.0, 
        6.0
    };
    var z =
        from x in xs
        from y in ys
        select new
        {
            x = x,
            y = y
        };
    var z2 = xs.SelectMany((double x) =>
        from y in ys
        select new
        {
            x = x,
            y = y
        });
}

最佳答案

一种方法是:

var z2 = xs.SelectMany(x => ys, (x, y) => new {x, y});

关于c# - 仅使用扩展方法在 Linq 中进行漂亮、干净的交叉连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9120318/

相关文章:

c# - 如何在 web.config 之外创建连接字符串

c# - 如何在 Xamarin.Forms 上调用 HTTP2

MySQL - 将 View 加入 ITSELF

sql - 这些连接之间的区别

c# - 卡在简单的单参数 lambda 和 bool 返回值

c# - 设置 DataGrid 列的样式

c# - 违反 PRIMARY KEY 约束 : Cannot insert duplicate key in object

c# - 如何迭代 linq-to-sql 查询结果的结果并追加结果?

c# - 自使用 .Net 4.0 以来 visual studio Release模式中的 InvalidOperationException

sql - 从12月到12月获得AVG SQL