0

LINQ の .include に頭を悩ませる問題がいくつかあります。誰かがこれを達成するためのクエリを私に見せてくれれば、とても感謝しています:

User と Validation (一連の検証コード) という 2 つのエンティティがあります。これらは EF5 では 1:* として関連付けられています。User オブジェクトを取得して Validations コレクションを熱心に読み込もうとしています。

現時点では、これを行っています (cx は using ブロック内のコンテキストです):

var user = cx.Users
            .Where(u => u.UserGuid.Equals(UserGuid))
            .FirstOrDefault();

if (user == null)
{
    return 0;
}

var validation = cx.Validations
            .Where(v => v.Code.Equals(Code))
            .Where(v => v.UserId.Equals(user.UserId))
            .FirstOrDefault();

しかし、これを 1 つのクエリだけで実現するにはどうすればよいのでしょうか。

user.Validations.FirstOrDefault();

エラーを取得せずに、Validation.Code == Code テストを満たす Validations のみを取得しますか?

助けてくれてありがとう(混乱しているように聞こえるかもしれませんが、それは私が混乱しているからです)。

4

2 に答える 2

1

次のようなことを試しましたか:

var validation = cx.Validations.Where(v=>v.Code==Code &&
                                         cx.Users.Any(u=>u.UserID==v.UserID && 
                                                         u.UserGuid==UserGuid)
                                      ).FirstOrDefault();
于 2013-05-04T12:50:45.140 に答える
1

次のようにして、関連するレコードも含める必要がある場合があります。

var user = cx.Users
             .Where(u => u.UserGuid.Equals(UserGuid))
             .Include(u => u.Validations)
             .FirstOrDefault();

ただし、要求された検証を選択できるはずです

user.Validations
    .FirstOrDefault(v => v.Code.Equals(Code));
于 2013-05-04T12:57:01.017 に答える