2012-02-16 8 views
0

私はLinq To Sqlを使用してWP7アプリケーションを開発しています。私はLinqを使用しましたが、これはLinqをSqlに使用した最初のものです。 EntitySetでデータをフィルタリングする際に問題が発生しています。私はそれが間違っているかもしれない私は手がかりがありません。私が今働いているのは動作しますが、私はEntitySetの1つをフィルタリングする必要があります。LinqToSql Filter EntitySet

私は4つのテーブルを持っています。親、子、孫、親テーブルのリンクテーブル。 ParentChildを照会すると、ParentChildエンティティが返され、親、子、および孫のエンティティを順番に繰り返し処理できます。私ができることをしたいのは、Grandchildエンティティをフィルタリングすることです。

私は親のテーブルに父と母がいると言います。それから子どものテーブルに息子と娘がいます。そして、孫のテーブルにある孫と孫娘。もちろん普通のアソシエーションなどがあります。

私は父親を返すこともできます。これは、関連するすべてのテーブルも正しく取得できます。私が持っている問題は、孫のフィルタリングです。私は孫だけを望んで、セックスの場を持っているとしましょう。これどうやってするの?私はそれを理解できないようです。

これは私が使用しているコードですが、うまく動作しますが、すべての孫を引きます。

IQueryable<ParentChild> parentChild = from ParentChild c in DataContext.ParentChild 
               where c.ParentId == this.parentId 
               select c; 

foreach (Grandchild grandchild in parentChild.SelectMany(parent => parent.Child.Grandchild)) 
{ 
    Console.WriteLine(grandchild.Name); 
} 

私はこれを行うので、場合:

IQueryable<ParentChild> parentChild = from ParentChild c in DataContext.ParentChild 
             where c.ParentId == this.parentId && c.Child.Grandchild.Any(a => a.Sex == "F") 
             select c; 

foreach (Grandchild grandchild in parentChild.SelectMany(parent => parent.Child.Grandchild)) 
{ 
    Console.WriteLine(grandchild.Name); 
} 

私は親を取得しますが、私は唯一の女性の孫を持つ子どもたちを取得します。私は親、すべての子供たち(女性の孫がいなくても、孫がいなくても)と女性の孫だけが欲しいです。

答えて

1

多くの試行錯誤と検索の結果、私は答えを見つけました。私はAssociateWithオプションを使用する必要があります。

DataLoadOptions dataLoadOptions = new DataLoadOptions(); 
dataLoadOptions.AssociateWith<Child>(c => c.Grandchild.Where(p => p.Sex == "F")); 

this.DataContext.LoadOptions = dataLoadOptions; 
+0

これはまさに私が後にしたものであり、より多くのアップフォートが必要です! – Ian

0

外部キーがSQLで正しく設定されている限り、 LINQ to SQLは、外部キーの関係と一致する関連プロパティを与えることができます。

あなたの外部キーが設定されている場合は、次の操作を行うことができるでしょう...

var query = from p in DataContext.Parent    
      //make sure they have at least 1 female grandchild 
      where p.GrandChilds.Any(gc => gc.IsFemale) 
      select p; 

私はあなたのデータモデル内の名前についていくつかの仮定をしましたが、あなたのアイデアを得ます。 :-)

+0

ありがとうございます、正しい方向に私を得る。それは有り難いです。 – vincentw56

+0

私が今問題を抱えているように見えるのは、それが孫を引き寄せるということだけですが、孫に関連付けられた子を引っ張るだけです。私はすべての子供のために父親、すべての子供たち、そしてすべての女性の孫を引き取ることができるようにしたい。 – vincentw56