2011-10-17 20 views
2

私は以下の構文を持っています。私はSQLの制約(すなわち、データモデルにおける外部キーの関係など)を設定しました。私はラムダ式を使ってこのステートメントを書く方法を知りたいと思います。出来ますか?私は熱心なローディングについての記事を読んだが、それがどのように適用されるのか、クエリをより簡潔に書くことができるかどうかは不明です。Entity Framework結合テーブルの適切な使用?

var nominations = from n in ctx.Nominations 
           join c in ctx.Nominees 
           on n.NominationId equals c.NominationId 
           where c.NomineeADUserName == UserName 
           select n; 
+0

の一部。これは、それはこれが重複して表示されます – Andreas

+0

を得ることができるように良いですhttp://stackoverflow.com/questions/2767709/c-sharp-joins-where-with-linq-and-lambda/2767742#2767742 –

答えて

1

次のようにして、メソッドの構文を使用して、同じクエリを記述することができます

ctx.Nominations.Join(ctx.Nominees, 
        n=>n.NominationId, 
        c=>c.NominationId, 
        (n,c)=>new {c, n}) 
       .Where(x=>x.c.NomineeADUserName == Username) 
       .Select(x.n); 

私はそれが読めるというより簡潔にするために、その重要だと思います。あなたのバージョンはより読みやすくなります。

また、メソッド構文またはクエリ構文を記述する場合でも、クエリは遅延的に評価されます。あなたが望むなら、いずれかのクエリの終わりにToList()を呼び出すことによって熱心な読み込みを強制することができます。

あなたはまた、ナビゲーションプロパティ(関連エンティティ)をロードしたい場合は、あなたがそれを行う前にIncludeメソッドのEntitySetを呼び出す必要があり、クエリ

関連する問題