2009-08-30 22 views
0

私は人のデータベースを持ち、人それぞれが人テーブルと関心テーブルとの1対多の関係を通じて処理される複数のintrestを持つことができるサイトを持っています。サイト上で私は複数のセレクトボックスを持つことができ、ユーザーは好きなだけ多くを選ぶことができる聴衆を持っていたい。私が返信したいのは、選択したオプションに関心があるすべての人物のレコードセットです。私のコードは、C#のasp.netで、これまでのところ、次のようになります。Linq to SQL Records

personResults = (from p in data.Persons 
       orderby p.lastName, p.firstName 
       select p); 

そして私は、私は次のコードの最後の行は完全に偽である知っているが、このような何かを追加したいです。興味が私の複数選択ボックスIDであると仮定してください。

List<int> interestIdList = new List<int>(); 
    if (interest.GetSelectedIndices().Length > 0) { 
     foreach(int selectedIndex in interest.GetSelectedIndices()){ 
     interestIdList.Add(int.Parse(interest.Items[selectedIndex].Value)); 
    } 
    personResults = personResults.Where(x => interestIdList.Contains(x.Interests[].interestID)); 
} 

問題は最後のコード行です。 x.Interestsはデータベースからのinterestオブジェクトのコレクションなので、interestIDにアクセスすることはできません(現在5つの興味がある場合、アクセスするアイテムIDのコードはどのようになりますか)。それが私の興味のIDのリストを使用して関心オブジェクトのリストを構築するのに役立ちますが、私はまだ質問を構築する方法を理解できません。

私の目標を述べるには、interestIdList配列に興味のある人が興味のある人がいなければなりません。彼らはすべて一致する必要はありません。少なくとも一つの共通の価値がある限り、私はその記録を望む。

答えて

1

DBMLに設定されている利益のテーブルに「personsWithInterests」テーブル名様のテーブルから適切な関係ならば、あなたはこれを試すことができます。

ArrayList ids = new ArrayList(); 
foreach (int index in interest.GetSelectedIndices()) 
{ 
    ids.Add(interest.Items[index].Value); 
} 
string[] idArray = (string[])ids.ToArray(typeof(string)); 
var personsWithInterests = (from pi in data.PersonInterests where idArray.Contains(pi.Interest.Id.ToString()) select pi.Person).Distinct(); 
+0

が、これは右のトラックに私を得た、ありがとうございました。 興味のあるIDのリストを取得して、IDを一致させてすべてのpersonInterestを結合テーブルから取り出し、personInterests.personを選択したクエリを実行していました 次に結果を取得し、人を返すクエリのfrom節で使用できるID。 –