Заменить на левые соединения - PullRequest
0 голосов
/ 17 мая 2018

Как я могу изменить этот запрос Linq на левые соединения вместо внутренних?

from EH in db.EventsHistory
join AH in db.EventsAttr on EH.TRANSACTIONID equals AH.TRANSACTIONID
join E in db.Events on EH.EVTID equals E.EVTID
group EH by new { EH.TRANSACTIONID, EH.MACGRP, EH.MACID, EH.ORDID, EH.ORDSPLIT, EH.LINID, EH.EVTDATETIME, EH.MATID, EH.PRODID, E.DESC, NUM_ATTR = AH.TRANSACTIONID } into grouped

select new { grouped.Key.TRANSACTIONID, grouped.Key.MACGRP, grouped.Key.MACID, grouped.Key.ORDID, grouped.Key.ORDSPLIT, grouped.Key.LINID, grouped.Key.EVTDATETIME, grouped.Key.MATID, grouped.Key.PRODID, grouped.Key.DESC, NUM_ATTR = grouped.Count() };

1 Ответ

0 голосов
/ 17 мая 2018

В Linq LEFT JOIN создается с помощью группового соединения с методом DefaultIfEmpty.Базовая конструкция выглядит следующим образом с использованием синтаксиса запроса:

var query = from c in db.Customers
            join o in db.Orders on c.Id equals o.CustomerId into g
            from o in g.DefaultIfEmpty()
            select new 
            { 
                Customer = c, 
                Order = o 
            };

Пример с синтаксисом метода:

var query = db.Customers
   .GroupJoin(db.Orders, c => c.Id, o => o.CustomerId, (c, og) => new
   {
       Customer = c,
       Order = og.DefaultIfEmpty()
   });

Таким образом, ваш запрос должен выглядеть следующим образом:

var query = from eh in db.EventsHistory
            join ah in db.EventsAttr on eh.TransactionId equals ah.TransactionId into g
            join e in db.Events on eh.EvtId equals e.EvtId into g2
            from ah in g.DefaultIfEmpty()
            from e in g2.DefaultIfEmpty()
            group eh by new { ... } into grouped
            select new { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...