Справка по LINQ to SQL - PullRequest
0 голосов
/ 29 июня 2011

У меня есть этот запрос, который запускает объединение книг, TradingDesks и ProductInfos.

var queryjoin = from b in books.values
                join d in tradingdesks
                    on b.tradingdeskid equals d.id
                **join p in productinfoss**
                    on b.id equals p.riskbookid
                select new { p, book = b.name, tradingdeskname = d.name };

В последнем объединении Я бы хотел сделать правое внешнее объединение с продуктами . Я пытаюсь не использовать динамический SQL-запрос и пытаюсь получить эту работу с самим linq. Я не хочу использовать где, так как это сильно влияет на производительность. Ранее я пытался использовать linq для объектов, но не смог получить нужную производительность, а теперь пытаюсь использовать linq для sql, но все еще не могу этого добиться. Справка по LINQ Query . Любая помощь с благодарностью.

Ответы [ 2 ]

1 голос
/ 29 июня 2011

пожалуйста, попробуйте следующее

var queryjoin = from p in productinfoss
                join b in books.values on p.riskbookid equals b.id into temp
                from t in temp.DefaultIFEmpty()
                join d in tradingdesks on 
                t.tradingdeskid equals d.id
                new { p, book = t==null?"no name":t.name, tradingdeskname = d.name };

это должно работать в этом сценарии. я не проверял это хотя

1 голос
/ 29 июня 2011

Попробуйте (проверьте на опечатку productinfos(s)):

РЕДАКТИРОВАТЬ: Извините, я дал вам левое внешнее соединение. Правое внешнее объединение недоступно в Linq, поэтому вам нужно немного переформатировать запрос.

var queryjoin = from p in productinfos
                join b in books.values
                    on p.riskbookid equals b.id into outer
                from o in outer.DefaultIfEmpty()
                join d in tradingdesks
                    on o.tradingdeskid equals d.id
                select new { 
                       p,
                       book = (o==null) ? "(no book name)" : o.name,
                       tradingdeskname = d.name 
                       };
...