2012-03-14 4 views
2

親とその子のリストがあれば、すべての親とその子孫のリストを返したいと思います。これは、SQLクエリでは簡単です。私が持っている問題は、LinqとEFの関係で、どのような方法でもクエリを動作させることができないようです。 EFの制限のため、子供の帰国を確実にするためのインクルードはできません。 LINQの下のSQLをどのようにして、子コレクションと一緒に私の親エンティティを返すか、女性レコードのすべてを無視して、男性だけまたは空コレクションを返すのですか?Linq to Entity Frameworkは、サブセットまたは空の子コレクションのみを持つ親リストを返します。

SQL

SELECT p.Id, p.FirstName, p.LastName, c.Id, c.ParentId, c.FirstName, c.LastName, c.Sex FROM Parent p 
LEFT JOIN children c ON c.ParentId = p.Id AND c.Sex = 'M' 

答えて

3

(私は、構文が正確に正しい:-Pであるという主張をしません):

var query = from p in context.Parents 
      join c in context.Children.Where(x => x.Sex == 'M') on p.Id equals c.ParentId into childrenGroup 
      select new 
      { 
       Parent = p, 
       Children = childrenGroup, 
      }; 

フラット化リスト:

var query = from p in context.Parents 
      from c in context.Children.Where(x => p.Id == x.ParentId) 
             .Where(x => x.Sex == 'M') 
             .DefaultIfEmpty() 
      select new 
      { 
       ParentId = p.Id, 
       ParentFirstName = p.FirstName, 
       ParentLastName = p.LastName, 
       ChildId = c.Id, 
       ChildFirstName = c.FirstName, 
       ChildLastName = c.LastName, 
       ChildSex = c.Sex 
      }; 
1

どこオペレータ

var query = 
    from p in dc.Parent 
    where !(from c in dc.children 
     select c.ParentId where c.Sex = 'F') 
     .Contains(c.ParentId) 
    select c; 

でクエリを微調整する必要がありますので、私はあなたのオブジェクトの構造を知りませんが、基本的な概念は取得する必要はありませんしてみてくださいあなたはあなたがなりたい場所へ。子供のコレクションと

親:あなたがそうのように匿名型またはPOCOに突出した気にしない場合は、これを達成することができます

関連する問題