我有一些看起来像这样的简单类:
Class Favorites
Guid UserId
Guid ObjectId
Class Objects
Guid Id
String Name
使用Entity Framework我想选择所有被用户标记为收藏的对象。
所以我尝试了类似的东西
context.Objects.Where(
x => x.Id ==
context.Favorite.Where(f => f.UserId == UserId)
.Select(f => f.ObjectId).Any()
);
但我不明白。我也尝试过交叉,但我最了解的是同一类型。一个用户可以拥有许多收藏对象
答案 0 :(得分:6)
你可以使用join子句:
context.Favorite
.Where(f => f.UserId == UserId)
.Join(context.Objects, t => t.ObjectId, u => u.Id, (t, u) => t);
答案 1 :(得分:4)
我会加入,我的linq看起来像:
var matches = from o in context.Objects
join f in context.Favorite on o.Id equals f.ObjectId
where f.UserId == UserId
select o;
答案 2 :(得分:1)
from o in context.Objects
join f in context.Favorites on o.Id equals f.ObjectId
where f.UserId == @userId
select //whatever you wants
答案 3 :(得分:0)
使用FirstOrDefault()而不是Any()
答案 4 :(得分:0)
您的收藏夹类需要一个属性,将其链接回对象,而不是double where子句,您可以使用Include
类
Class Favorites
Guid UserId
Guid ObjectId
[ForeignKey("Id")]
Objects objs
Class Objects
Guid Id
String Name
LINQ的
context.Favorites.Include(objs).Where(x => x.UserID == UserID)
然后,你的收藏夹对象下面会有一组对象。