In previous post we joined tables but there was a problem. We can not see "Help" menu which has not any sub menu. To solve the problem we will use Outer Join.
Linq
var menus = from t in Menus
where t.MenuType==1
join s in Menus on t.MenuID equals s.MenuParent into Subs
from ss in Subs.DefaultIfEmpty()
select new {
TopMenu = t.Title,
SubMenu = ss == null ? null : ss.Title
};
Lambda
Menus
.Where (t => (t.MenuType == 1))
.GroupJoin (
Menus,
t => (t.MenuID),
s => s.MenuParent,
(t, Subs) =>
new
{
t = t,
Subs = Subs
}
)
.SelectMany (
temp0 => temp0.Subs.DefaultIfEmpty (),
(temp0, ss) =>
new
{
TopMenu = temp0.t.Title,
SubMenu = (ss == null) ? null : ss.Title
}
)
SQL
DECLARE @p0 Int = 1
SELECT [t0].[Title] AS [TopMenu],
(CASE
WHEN [t2].[test] IS NULL THEN NULL
ELSE CONVERT(NVarChar(MAX),[t2].[Title])
END) AS [SubMenu]
FROM [Menu] AS [t0]
LEFT OUTER JOIN (
SELECT 1 AS [test], [t1].[Title], [t1].[MenuParent]
FROM [Menu] AS [t1]
) AS [t2] ON ([t0].[MenuID]) = [t2].[MenuParent]
WHERE [t0].[MenuType] = @p0
0 comments:
Post a Comment