2

私は、オンラインビデオチュートリアルを介して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クエリの結果であるとしましょう。x2番目のクエリ内で強制的に実行するにはどうすればよいですか?これを考慮する必要がありますか、それともLINQはこの場合に何をすべきかを知っていますか?

ありがとう

編集:クエリの結果を別のパラメータとして使用しようとすると、貪欲な演算子を使用して強制的に実行する必要があります。多くの人が.Count()またはを使用するのが好き.ToList()です。x(上記の例から)。を使用して1つの文字列を返すことだけを期待して.Take(1)います。最初のクエリの最後に追加ToList()する場合、2番目のクエリでx[0]を使用する必要があります。これは物事を行うための厄介な方法のようです。結果が1つしかないことがわかっている場合に、クエリを強制的に実行するためのより良い方法はありますか?

4

1 に答える 1

5

あなたの質問が理解できたら、結合されたモデルで条件を実行しようとしていますか?

var query = db.Users.Where(x => x.Addresses.Where(y => y.Value >= yourValue).Any());

より大きいプロパティ値を持つすべてのユーザーが返されますyourValue。クエリで住所を返す必要がある場合は、クエリに追加するだけですInclude。例えば:

query.Include(x => x.Addresses);

例にあることを手動で行う必要はありませんJoin

于 2012-12-03T23:00:48.207 に答える