Вы не можете использовать Include
, если используете join
.Теперь есть способ обойти это.Более того, то, что вы пытаетесь сделать, - это фильтрация включений, что также невозможно.
Вы можете сделать это:
var result = (from u in entity.Table1.Include("Table2")
where u.Column2 == “abc” && u.Column3 == ‘xyz’ &&
u.Table2.Any(o => o.Column5 == organizationCode)
select u).FirstOrDefault();
Но он будет включать в себя все Table2
сущностей в отфильтрованных Table1
сущностях.Вы не можете ограничивать включенные значения только теми, которые имеют некоторый организационный код.
Чтобы отфильтровать свойства навигации, вы должны использовать проекцию:
var result = (from u in entity.Table1
where u.Column2 == “abc” && u.Column3 == ‘xyz’ &&
u.Table2.Any(o => o.Column5 == organizationCode)
select new
{
Table1 = u
Table2 = u.Table2.Where(o => o.Column5 == organizationCode)
}).FirstOrDefault();
Необходимо проецировать либо на анонимный тип, либо на пользовательский тип.
Причиной, по которой ваш второй запрос работает, является автоматическое связывание отношений для отслеживаемых свойств, и это еще один способ фильтрации отношений, но в этом случае этого достаточно:
var result = (from u in entity.Table1
where u.Column2 == “abc” && u.Column3 == ‘xyz’ &&
u.Table2.Any(o => o.Column5 == organizationCode)
select u).FirstOrDefault();
var resultOrg = (from o in entity. Table2
where o.Column5 == organizationCode
select o).FirstOrDefault();