私は、オンラインビデオチュートリアルを介してLINQ、ASP.NET、EF、およびMVCを学習しているところです。LINQ拡張メソッド構文の結合を理解するのに役立つ情報が欲しいです。
簡単にするために、2つのテーブルがあります(これらはSQL DBにマップされています)。
User Table:
public int userID{get;set;}
public string firstName{get;set;}
...
Address
public int ownerID{get;set;}
public int value{get;set;}
public string Nickname{get;set;}
public string street{get;set;}
public string zip{get;set;}
...
特定のユーザーが所有するすべてのプロパティを検索するとします。私はこのようなことができると信じています:
var test = db.User
.Join(db.Address, user => user.userID, add => add.ownerID, (user, add) => new { user, add });
Source: http://byatool.com/c/linq-join-method-and-how-to-use-it/
これはと同等である必要があります
SELECT * FROM User a JOIN Address b on a.userID = b.ownerID
これが正しいことを確認してください。
ここで、特定のユーザーが所有する、を持つすべてのプロパティを検索したい場合はどうなりますかvalue greater than x
。さらに一歩進んで、xが別のLINQクエリの結果であるとしましょう。x
2番目のクエリ内で強制的に実行するにはどうすればよいですか?これを考慮する必要がありますか、それともLINQはこの場合に何をすべきかを知っていますか?
ありがとう
編集:クエリの結果を別のパラメータとして使用しようとすると、貪欲な演算子を使用して強制的に実行する必要があります。多くの人が.Count()
またはを使用するのが好き.ToList()
です。x
(上記の例から)。を使用して1つの文字列を返すことだけを期待して.Take(1)
います。最初のクエリの最後に追加ToList()
する場合、2番目のクエリでx[0]を使用する必要があります。これは物事を行うための厄介な方法のようです。結果が1つしかないことがわかっている場合に、クエリを強制的に実行するためのより良い方法はありますか?