Доброго...
Был запрос, который корректно работал возращая корневые и в них дочерние элементы:
this.ObjectContext.Parent.Include("Childs").Where(p => p.IsHidden == false)
У дочерних элементов также появилось свойство IsHidden и их также необходимо скрывать
Первое что попробывал сделать вот так:
this.ObjectContext.Parent.Include("Childs").Where(p => p.IsHidden == false).Where(c => c.IsHidden == false)
Ну это конечно не сработало, что и понятно, так как имеем вот такой SQL:
...
FROM [dbo].[Parent] AS [Extent1]
LEFT OUTER JOIN [dbo].[Childs] AS [Extent2] ON [Parent].[ParentID] = [Child].[ParentID]
WHERE (0 = [Extent1].[IsHidden]) AND (0 = [Extent1].[IsHidden])
...
Ну а хотелось бы конечно вот такой запрос иметь:
...
FROM [dbo].[Parent] AS [Extent1]
LEFT OUTER JOIN [dbo].[Childs] AS [Extent2] ON [Parent].[ParentID] = [Child].[ParentID] AND (0 = [Extent2].[IsHidden])
WHERE (0 = [Extent1].[IsHidden])
...
Это возможно?
Здравствуйте, detox, Вы писали:
D>Это возможно?
Попробуйте такое условие.
this.ObjectContext.Parent.Include("Childs").Where(p => p.IsHidden == false && p.Child.IsHidden == false);
Здравствуйте, mrjeka, Вы писали:
M>Здравствуйте, detox, Вы писали:
D>>Это возможно?
M>Попробуйте такое условие.
M>
M>this.ObjectContext.Parent.Include("Childs").Where(p => p.IsHidden == false && p.Child.IsHidden == false);
M>
В этом и дело, что у объекта Parent нет свойства Child у него есть только массив Childs.
Здравствуйте, detox, Вы писали:
D>Здравствуйте, mrjeka, Вы писали:
M>>Здравствуйте, detox, Вы писали:
D>>>Это возможно?
M>>Попробуйте такое условие.
M>>
M>>this.ObjectContext.Parent.Include("Childs").Where(p => p.IsHidden == false && p.Child.IsHidden == false);
M>>
D>В этом и дело, что у объекта Parent нет свойства Child у него есть только массив Childs.
this.ObjectContext.Parent.Include("Childs").Where(p => p.IsHidden == false && p.Childs.All(c => c.IsHidden == false));
Здравствуйте, Аноним, Вы писали:
А>
А>this.ObjectContext.Parent.Include("Childs").Where(p => p.IsHidden == false && p.Childs.All(c => c.IsHidden == false));
А>
Это интересно, но в итоге вот такой SQL:
FROM [dbo].[Parent] AS [Extent1]
LEFT OUTER JOIN [dbo].[Childs] AS [Extent2] ON [Extent1].[ParentID] = [Extent2].[ParentID]
WHERE (0 = [Extent1].[IsHidden])
AND (NOT EXISTS (
SELECT 1 AS [C1]
FROM [dbo].[Childs] AS [Extent3]
WHERE ([Extent1].[ParentID] = [Extent3].[ParentID])
AND ((cast(0 as bit) <> [Extent3].[IsHidden])
OR (CASE WHEN (0 = [Extent3].[IsHidden])
THEN cast(1 as bit)
WHEN (cast(0 as bit) <> [Extent3].[IsHidden])
THEN cast(0 as bit) END IS NULL))))
И теперь не выводятся все Parent у которых хотя бы один из Child имеет свойство IsHidden = false
Здравствуйте, detox, Вы писали:
D>Был запрос, который корректно работал возращая корневые и в них дочерние элементы:
D>У дочерних элементов также появилось свойство IsHidden и их также необходимо скрывать
How to do a Conditional Include.
Но могут быть подводные камни (была тема здесь, поищите).