我在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?
感谢您的帮助(我知道我听起来很困惑,但那是因为我)。
答案 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));