4
SELECT node.CategoryId,
node.CategoryName,
node.Description,
node.Lft, node.Rgt,
node.ShowOnMenu,
(COUNT(parent.CategoryName) - 1) AS Level,
(CASE WHEN node.Lft = node.Rgt - 1 THEN 'TRUE' ELSE 'FALSE' END) AS Leaf
FROM Article_Category AS node,
Article_Category AS parent
WHERE node.Lft BETWEEN parent.Lft AND parent.Rgt
GROUP BY node.CategoryId,node.CategoryName,node.Description,node.Lft,node.Rgt,node.ShowOnMenu
ORDER BY node.Lft
我的LINQ表達:
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();
我的問題:
LINQ的表達太長,有兩個「選擇新的'表達,我想知道如何縮短它?
linq查詢的相應擴展方法是什麼?如何使用擴展方法表達「從......哪裏......」?
好吧,我會試試吧,謝謝! – RongieZeng 2013-05-13 09:46:42
現在我的第一個問題已解決,我刪除了第一個「選擇新的」,它的工作原理。但我仍然不知道如何編寫相應的擴展方法。我必須使用'(u,c)=>'表達式來選擇我需要的所有屬性,然後再次選擇'GroupBy','OrderBy'和'Select new'。如果這樣,這與我的第一個問題(兩個'新')是一樣的。 – RongieZeng 2013-05-13 10:07:59
@RongieZeng更新了答案,以使用您提問的表格。 – Magnus 2013-05-13 11:08:36