回答
所有 LINQ查询表达式可以转换成“点号”(方法调用) - 这是基本的编译器做什么。然而,它为连接(和一些其他操作)引入了透明标识符,这些连接使得使用lambda表达式的等效代码更为简单。
鉴于代码将最终完全等同于查询表达式,我建议你坚持使用查询表达式版本。
如果你真的想转换为点符号出于某种原因,我强烈建议你这样做一个简单的例子第一个 - 一个连接只有几个属性。你会感觉到你需要做什么,并可以逐渐建立起来。
我的Edulinq post on query expression translation给出了编译器执行的所有转换的一些细节 - 这是一个很好的实验起点。
它打印了出来没有一个IDE,所以肯定有些失误......
join ... on ... equals ... into
成为GroupJoin
from ... in group.DefaultIfEmpty
变得比SelectMany(group.DefaultIfEmpty)
其他,它是所有关于使用多个匿名类型管理范围。
var joinResult1 = FormReportDataTable.AsEnumerable()
.GroupJoin(dtFormsCategories.AsEnumerable(),
dr1 => dr1["FormID"], dr2 => dr2["ObjectID"],
(dr1, dr2s) => new {dr1 = dr1, dr2s = dr2s})
.SelectMany(g => g.dr2s.DefaultIfEmpty(), (g, dr2) => new {dr1 = g.dr1, dr2 = dr2 })
.GroupJoin(drEntities.AsEnumerable(),
x => (Guid)x.dr1["EntityID"], er => (Guid)er["ID"],
(x, ers) => new {dr1 = x.dr1, dr2 = x.dr2, ers = ers})
.SelectMany(g => g.ers.DefaultIfEmpty(), (g, er) => new {dr1 = g.dr1, dr2 = g.dr2, er = er })
.GroupJoin(dtCategories.AsEnumerable(),
x => (Guid)x.dr2["CategoryID"], cr => (Guid)cr["ID"],
(x, crs) => new {dr1 = x.dr1, dr2 = x.dr2, er = x.er, crs = crs})
.SelectMany(g => g.crs.DefaultIfEmpty(), (g, cr) => new {dr1 = g.dr1, dr2 = g.dr2, er = g.er, cr = cr })
var joinResult = joinResult1.Select(x => new
{
SubPortalName = x.cr == null ? string.Empty : ...
... //could have posted this code if it was in the question...
});
真的使SQL看起来更容易呃 – BigOmega 2013-08-06 13:11:13
@ioSamurai如果你认为这很糟糕,你还没有看到我见过的SQL。 – 2013-08-06 17:25:29
- 1. 如何编写LINQ在lambda表达式
- 2. LINQ与Lambda表达式
- 3. LINQ Lambda表达式
- 4. Linq Lambda表达式
- 5. Linq,lambda表达式
- 6. 转换SQL查询与LEFT加入到lambda或Linq表达式
- 7. 编辑器模板的Lambda表达式太复杂了
- 8. LINQ的LAMBDA加入表达XML
- 9. 如何编写嵌套集合的Linq或Lambda表达式
- 10. Lambda表达式为加入
- 11. Lambda表达式,并加入
- 12. 使用Linq或Lambda表达式检查复杂对象中的重复内容
- 13. 如何在Linq查询中编写GroupJoin Lambda表达式?
- 14. LINQ到lambda表达式
- 15. 如何编写sql表达式的lambda表达式?
- 16. 如何编写VB.Net Lambda表达式
- 17. Lambda表达式与表达
- 18. 使用lambda表达式在Linq中加入表格
- 19. 如何使用linq或lambda表达式加入两个列表
- 20. 涉及连接的复杂sql查询的Linq和Lambda表达式
- 21. 与lambda表达式
- 22. 与lambda表达式
- 23. 复杂组与lambda
- 24. 复杂EF图LINQ加入
- 25. 如何在java中编写更复杂的正则表达式?
- 26. 由linq lambda表达式c#左加入组?
- 27. 添加lambda表达式试图编译
- 28. 查询表达式与Lambda表达式
- 29. LAMBDA或LINQ表达式从列表
- 30. 复杂的Scala类型推理w/Lambda表达式
是的。如果您不确定从哪里开始,请先尝试一个较小的练习例子。 – 2013-03-03 14:47:37
请复制并粘贴代码*作为文本*而不是截图。你已经让*任何人都难以回答......通常能够从问题中复制并编辑是有用的... – 2013-03-03 14:49:54
你可以复制和粘贴代码而不是图像,所以我可以很容易地测试它? – 2013-03-03 14:53:16