Linq any - 如何选择

时间:2012-12-05 19:41:36

标签: c# .net linq entity-framework

我有一些看起来像这样的简单类:

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

但我不明白。我也尝试过交叉,但我最了解的是同一类型。一个用户可以拥有许多收藏对象

5 个答案:

答案 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)

然后,你的收藏夹对象下面会有一组对象。