我有这样的架构
套餐 - >列表 - >用户
所有'一对多'都在线下......
所以我想运行一个查询,在那里我获得userID在用户中匹配的所有包。
var pck = (from pk in context.Package
where pk.Lists[here's my problem]
我认为此处的导航属性为:pk.Lists. *Users.UserId* == MyUserId
,但我没有在列表级别看到导航属性。
我还没有像这样更复杂的EF查询。我环顾网络但没找到任何东西让它点击。我转向你堆叠。有人帮我看光!
编辑:再次感谢堆叠,我会尽力向前付款! 而且,所有这些答案都让我了解了ef4的力量!答案 0 :(得分:8)
我假设一个包包含多个列表,一个列表包含多个用户?你可以尝试:
var pck = content.Package
// Outdented just for Stack Overflow's width
.Where(pk => pk.Lists.Any(list => list.Any(u => u.UserId == myUserId)));
或使用交叉加入:
var pck = from pk in content.Package
from list in pk.Lists
from user in list.Users
where user.UserId == myUserId
select ...; // Select whatever you're interested in
答案 1 :(得分:1)
试试这个:
pk.Lists.Any(l => l.Users.Any(u => u.UserId == MyUserId))
答案 2 :(得分:1)
context.Packages.Where(p => p.Lists.Any(l => l.Users.Contains(MyUserId)))
或者,如果您的用户是其他用户ID,那么
context.Packages.Where(p => p.Lists.Any(l => l.Users.Any(u => u.Id == MyUserId)))
答案 3 :(得分:1)
var packages =
context.Package.Where(p =>
p.Lists.Any(l =>
l.Users.Any(u => u.UserId == MyUserId
)
);
答案 4 :(得分:1)
如果链接不可为空且方向包有很多列表且列表有很多用户,那么查询就很容易了。
var pck = from user in context.Users
where user.UserId == userId
select user.List.Package;