2011-06-29 29 views
0

Books、TradingDesks、ProductInfosの結合を実行するこのクエリがあります。LINQ to SQLヘルプ

最後に
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 Help。どんな助けでも大歓迎です。

答えて

1

この(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 
         }; 
+0

これは左の外部結合同等ですか? –

+0

はい、申し訳ありませんが正しいです!左外部結合に並べ替える必要があります(またはグループを使用できます)。ハングアップ... –

1

それは、このシナリオで作業する必要があり、次の

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 }; 

を試してみてください。私はそれをテストしていません

+0

いいえ。これは期待される結果をもたらさない。私の最初の質問では、私はすべての製品を取得するだろう –

+0

それはあなたが製品の右外部結合を取ることによって得られるものです。このクエリがあなたに返す他のもの –

+0

--- Yours ----- SELECT DISTINCT [t0]。[Family] FROM [EVF_TradeService]。[dbo]。[製品] AS [t0] LEFT OUTER JOIN [EVF_HierarchyService]。[dbo]。[Book] AS [t1] ON [t0]。[RiskBookId] = [t1]。[ID] INNER JOIN [EVF_HierarchyService]。[dbo]。[TradingDesk] AS [t2] ON [t1]。[TradingDeskId] = [t2]。[Id] ---------------------------------- ---------------------------------- –