C# 编写此linq查询的更好方法是什么?
SQL: 我的linq表情: 我的问题: linq表达式太长,有两个“select new”表达式,我想知道如何缩短它 linq查询的相应扩展方法是什么?我如何表达来自。。。从……哪里。。。用可拓方法 第一个选项选择“新建”。。到x我不明白为什么你需要,尝试删除它,并写新的组节点 from…from被写成一个lambda表达式,如下所示:C# 编写此linq查询的更好方法是什么?,c#,linq,entity-framework,linq-to-sql,linq-to-entities,C#,Linq,Entity Framework,Linq To Sql,Linq To Entities,SQL: 我的linq表情: 我的问题: linq表达式太长,有两个“select new”表达式,我想知道如何缩短它 linq查询的相应扩展方法是什么?我如何表达来自。。。从……哪里。。。用可拓方法 第一个选项选择“新建”。。到x我不明白为什么你需要,尝试删除它,并写新的组节点 from…from被写成一个lambda表达式,如下所示: Categories.SelectMany(n => Categories, (n, p) => new { Node = n, Parent =
Categories.SelectMany(n => Categories, (n, p) => new { Node = n, Parent = p });
现在我的第一个问题解决了,我删除了第一个“选择新”,它工作了。但是我仍然不知道如何编写相应的扩展方法。我是否必须使用'u,c=>'表达式来选择我需要的所有属性,然后再次使用'GroupBy'、'OrderBy'和'selectnew'呢?如果是这样的话,我的第一个问题和第二个“新”问题是一样的。@RongieZeng更新了答案,使用了你问题中的表格。
var list = (from node in DbContext.Categories
from parent in DbContext.Categories
where node.Lft >= parent.Lft && node.Lft <= parent.Rgt
select new
{
node.CategoryId,
node.CategoryName,
node.Description,
node.Lft,
node.Rgt,
node.ShowOnMenu,
ParentName = parent.CategoryName,
} into x
group x by new
{
x.CategoryId,
x.CategoryName,
x.Description,
x.Lft,
x.Rgt,
x.ShowOnMenu,
} into g
orderby g.Key.Lft
select new
{
CategoryId = g.Key.CategoryId,
CategoryName = g.Key.CategoryName,
Description = g.Key.Description,
Lft = g.Key.Lft,
Rgt = g.Key.Rgt,
ShowOnMenu = g.Key.ShowOnMenu,
Level = g.Count() - 1,
IsLeaf = g.Key.Lft == g.Key.Rgt - 1
}).ToList();
Categories.SelectMany(n => Categories, (n, p) => new { Node = n, Parent = p });