将此LINQ表达式转换为Lambda

Ram*_*Vel 14 c# linq lambda

大家好,我很难将下面的linq表达式(左连接实现)转换为lambda表达式(用于学习).

var result = from g in grocery
       join f in fruit on g.fruitId equals f.fruitId into tempFruit
       join v in veggie on g.vegid equals v.vegid into tempVegg
       from joinedFruit in tempFruit.DefaultIfEmpty()
       from joinedVegg in tempVegg.DefaultIfEmpty()
       select new { g.fruitId, g.vegid, fname = ((joinedFruit == null) ? string.Empty :     joinedFruit.fname), vname = ((joinedVegg == null) ? string.Empty : joinedVegg.vname) };
Run Code Online (Sandbox Code Playgroud)

有人可以建议我如何做到这一点.

如果有人给我"C#Lambdas&Linqs"的优秀教程链接,我真的很感激

Bra*_*rks 27

要将Linq查询转换为它的等效Lambda:

  1. 下载Linqpad并运行您的查询.
  2. 在结果窗口中,单击工具栏中的"λ"按钮.它位于"结果"窗口的正上方
  3. 您的查询将转换为等效的Lambda表达式!

在此输入图像描述

  • 我有 Linqpad,但没有创建与我可以查询的服务的“连接”,我看不到 lambda 的按钮。我不知道如何粘贴 LINQ 查询并将其转换为 lambda。这实际上可能吗? (2认同)

Jim*_* G. 10

这是我遵循的启发式:

当你有连接时,喜欢lambdas上的LINQ表达式.

我认为连接的lambdas看起来很乱,很难阅读.


Mar*_*man 8

我通常使用ReSharper来帮助我将事物转换为方法链和lambda's,这有助于我来回相当容易.

    var result = from g in grocery
                 join f in fruit on g.fruitId equals f.fruitId into tempFruit
                 join v in veggie on g.vegid equals v.vegid into tempVegg
                 from joinedFruit in tempFruit.DefaultIfEmpty()
                 from joinedVegg in tempVegg.DefaultIfEmpty()
                 select new { g.fruitId, g.vegid, fname = ((joinedFruit == null) ? string.Empty : joinedFruit.fname), vname = ((joinedVegg == null) ? string.Empty : joinedVegg.vname) };
Run Code Online (Sandbox Code Playgroud)

然后使用ReSharper将LINQ转换为方法链的选项等于以下内容:

        var result =grocery .GroupJoin(fruit, g => g.fruitId, f => f.fruitId, (g, tempFruit) => new {g, tempFruit})
                            .GroupJoin(veggie, @t => @t.g.vegid, v => v.vegid, (@t, tempVegg) => new {@t, tempVegg})
                            .SelectMany(@t => @t.@t.tempFruit.DefaultIfEmpty(), (@t, joinedFruit) => new {@t, joinedFruit})
                            .SelectMany(@t => @t.@t.tempVegg.DefaultIfEmpty(),(@t, joinedVegg) =>
                                new
                                    {
                                        @t.@t.@t.g.fruitId,
                                        @t.@t.@t.g.vegid,
                                        fname = ((@t.joinedFruit == null) ? string.Empty : @t.joinedFruit.fname),
                                        vname = ((joinedVegg == null) ? string.Empty : joinedVegg.vname)
                                    });
Run Code Online (Sandbox Code Playgroud)

当然,输出不太合乎需要,但它至少有助于在理解语法的某个地方开始.