Я пытаюсь преобразовать следующий SQL:C# Lambda Соединение слева - не может заставить его работать
select * from business
left outer join permissions on permissions.permid = busid
and anotherid = 17
в лямбда-выражения C#, а затем преобразовать его в перечислимого и сделать еще один фильтр на нем. Я пробовал следующий код:
IEnumerable<DTO_business> business= db.business
.Join(db.permissions,
bus => bus.busid,
perm => perm.perm_busid,
(bus, perm) => new { bus, perm })
.Where(e => e.perm.anotherid == 17).DefaultIfEmpty()
.AsEnumerable()
.Where(User.IsInRole("Administrator")
.Select(bus =>
new DTO_business()
{
BusinessID = bus.bus.busid.Convert(),
BusinessName = bus.bus.busname.Convert()
});
Но я верю, что он не работает как место, находящееся за пределами соединения. Я не уверен, как на самом деле получить это, где в рамках соединения, а затем запустить DefaultIfEmpty() в соединении, которое должно дать мне левое соединение.
EDIT: бит, который я не могу получить, это: и anotherid = 17. Если я помещу его в. Где в linq он полностью фильтрует его и не является частью левого соединения.
Не уверен, что могу использовать синтаксис запроса, поскольку мне нужно преобразовать в перечислимый (получить результаты в памяти), поскольку я выполняю функции C# (не SQL) для каждого возвращаемого элемента. – user3129594
@ user3129594 - Синтаксис запроса в конечном итоге преобразуется в лямбда и производит тот же вывод. Я не вижу причин, по которым вы не можете использовать синтаксис запроса здесь. –
Да, но для этого мне не нужно создавать другой DTO (который принимает все результаты из шины и разрешений), а затем превращать iqueryable в ienumeral, а затем делать преобразования в методе? Или я чего-то не хватает? – user3129594