从具有LINQ的两个实体中进行选择

时间:2013-05-04 12:42:57

标签: c# linq lambda entity-framework-5

我在LINQ中的.include周围有一些问题。如果有人能告诉我实现这一目标的查询,我会非常感激:

我有两个实体,User和Validation(这是一系列验证码)。它们在EF5中与1:*相关。我正在尝试获取User对象并急切加载Validations集合。

此时,我正在这样做(cx是使用块内的Context):

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();

但是我如何只在一个查询中实现这一点,以便我可以使用

user.Validations.FirstOrDefault();

没有收到错误,只获得满足Validation.Code == Code测试的Validations?

感谢您的帮助(我知道我听起来很困惑,但那是因为我)。

2 个答案:

答案 0 :(得分:1)

你有没有试过这样的事情:

var validation = cx.Validations.Where(v=>v.Code==Code &&
                                         cx.Users.Any(u=>u.UserID==v.UserID && 
                                                         u.UserGuid==UserGuid)
                                      ).FirstOrDefault();

答案 1 :(得分:1)

您可能还需要包含相关记录:

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

但是你应该能够用

选择所要求的验证
user.Validations
    .FirstOrDefault(v => v.Code.Equals(Code));