2012-02-26 2 views
1

私はFavoritePeopleの関連(関連する)テーブルを持つPeopleオブジェクトを持っています。 FavoritePeopleオブジェクトはUserIdとPersonIdを格納するだけなので、どの人がユーザーのお気に入りであるかが分かります。LINQクエリは、関連する(関連する)レコードが各自に存在する場合にtrueを返します。

私はエンティティフレームワーク4.2をコードファーストで使用しています。関連するレコードがFavoritePeopleに存在する場合、IsFavoriteをブール値とし、これをtrueに設定することを除いてPeopleのフィールドをすべてマップしました。

IsFavorite列に正しい値を持つすべての人物のレコードを返すことができます。

私はSQLでこれを行う方法を考え出すことができますが、私はLINQでこれを行う方法に固執しています!

提案がありますか?

+0

問題ではありませんかなり明確です - 「関連する記録」は何ですか? – BrokenGlass

+0

基本的には、関連付けられているということは、FavoritePeopleテーブルにPersonのレコードが存在し、そのPersonのPeopleテーブルでIsFavoriteフィールドをtrueに設定した場合です。 – Mitch

答えて

1

あなたはFavoritePeopleのプロパティを持っている場合は、次のことができるようにする。..

public bool IsFavorite {get{return FavoritePeople.Any();}} 
+0

タイロンのおかげで、それは個人的なレコードベースでそれを扱うための素晴らしい答えですが、私はコレクション全体のためにこれを行う必要があります。 – Mitch

+0

@Mitch - あなたが人のコレクションを持っているなら、私はコレクションを繰り返して、それぞれの "IsFavorite"値を取得します。あなたはそれをあなたが好きなようにすることができます。個々のプロパティを使用してコレクション全体を処理することはできません。 – JasCav

+0

@ JasCav - ご意見ありがとうございます。たぶん、これに対する私の全体的なアプローチは間違っています。私はちょうど人のリストにチェックボックスを表示して、それぞれの人が現在のユーザーのお気に入りリストにいるかどうかを表示したかったのです。私はこれがかなり一般的な状況であると考えていたでしょう(LINQを使って)。 – Mitch

0

私はので、私は答えを返信ますコメントするのに十分な担当者を持っていけません。

Tyronのソリューションを使用すると、複数の人を選択すると恐ろしいパフォーマンスが得られます。人々のために照会するときに

あなたはどちらか熱心に.Include(x => x.FavoritePeople)とFavoritePeople参照をロードする必要があります(警告:DBから巨大なデータセットのチャンス)
OR(好ましくは)IsFavoriteを含めるようにクエリを書き直す:

ctx.Peoples.Select(x => new 
{ 
    x.Name, 
    IsFavorite = x.FavoritePeople.Any() 
}); 
関連する問題