2009-11-20 25 views
17

Linq to Sqlを使用する外部結合の例はたくさんありますが、Linq to Entity FrameworkではサポートされていないDefaultIfEmpty()があります。LinqからEntity Frameworkへの外部結合は可能ですか

これは、外側が誰かでし.NET 3.5(私はDefaultIfEmptyは4.0で来ていることを理解し---それが私のために、この時点でオプションではありません)

を使用してエンティティへのLINQでは不可能で参加することを意味していますEntityFrameworkにLinqを使用して簡潔な例を提供してください。

答えて

35

LINQ to Entitiesでは、SQL結合ではなくリレーションシップの観点から考えると、したがって、SQLの外側のリテラル等価CustomerInfoにゼロに1つまたは2つの関係を持つエンティティPersonに参加は次のようになりますはcustomerinfo次いで式全体nullである場合、そのよう

var q = from p in Context.People 
     select new 
     { 
      Name = p.Name, 
      IsPreferredCustomer = (bool?)p.CustomerInfo.IsPreferredCustomer 
     }; 

L2Eは、参加を合体しますnullに評価されます。したがって、nullable boolへのキャストは、null不可能なboolの推論された型がその結果を保持できないためです。

は1対多のためには、一般的に階層ではなく、フラット、SQLスタイルの結果セットをしたい:

var q = from o in Context.Orders 
     select new 
     { 
      OrderNo = o.OrderNo, 
      PartNumbers = from od in o.OrderDetails 
          select od.PartNumber 
     } 

このあなたはまだありません詳細は注文を取得するように、左に限り参加するようなものですしかし、SQLのようなセットではなく、OOのようなグラフです。

+2

これはまさに私が探していた質の高い答えです。ありがとうございました! –

+1

+1はこのような良い答えでは不十分です! – Arjang

+1

チップをありがとうございます。誰かがそれを覚えていると、突然L2Eではテーブルとは無関係のオブジェクト間の関係について考えるのは明らかですが、私はそれを考えませんでした。本当に目が離せない... – Quagmire

関連する問題