【发布时间】:2017-10-17 16:23:25
【问题描述】:
我正在尝试将以下查询转换为 lambda 表达式
var results = (from g in _groups
join cr in _categoryRoots on g.Id equals cr.Group_Id into gcr
from lgc in gcr.DefaultIfEmpty(new CategoryRoot())
join c in _categories on lgc.Id equals c.CategoryRoot_Id into ccr
from lccr in ccr.DefaultIfEmpty()
select new GroupCategory
{
Id = g.Id,
Name = g.Name,
CategoryRoot_Id = lgc == null ? 0: lgc.Id,
CategoryRootName = lgc == null ? "": lgc.Name,
Category_Id = lccr == null ? 0: lccr.Id,
CategoryName = lccr == null ? "": lccr.Name
}).ToList();
想换成下面这样的东西。
var rs = _groups.Join(_categoryRoots, g => g.Id, cr => cr.Group_Id, (g, cr) => new GroupCategory { Id = g.Id, Name = g.Name, CategoryRoot_Id = cr.Id, CategoryRootName = cr.Name });
【问题讨论】:
-
那么,问题是什么?还是只是演示?
-
你所说的lambda表达式是指
_groups.Join(.....中的方法语法吗? -
为什么需要 lambda 语法?连接在 lambda 语法中是出了名的讨厌,而左连接更是如此。
-
问题在工作示例中很清楚,我有 3 个表我想通过 lambda 表达式离开连接,@juharr 理解它。我也同意@D Stanley,如果 lambda 表达式不是此类查询的好选择,它是正确的答案,我能够得到我想要的输出,但我无法学习如何翻译成 lambda,只是想学习。
-
我只想重申它是 METHOD SYNTAX,而不是 lambda 表达式或 lambda 语法。