3

我想写一个简单的查询,但是有一些问题。我有 2 张桌子 M 到 N:

用户 -> 事件。

我想获取特定事件的所有用户(通过 eventId 获取此事件)。

public IQueryable<User> GetUsersByEventId(int eventId)
{
    IQueryable<User> query = this.Context.Users.AsQueryable();

    return query.Where(x => x.Events.SingleOrDefault(e => e.EventId == eventId)); ??
}

缺少某些东西,我不知道是什么,有人可以帮助我吗?非常感谢 !

4

2 回答 2

7

如果我理解正确(添加你的模型会有所帮助),我想你想要Any

public IQueryable<User> GetUsersByEventId(int eventId)
{
      return Context.Users
                    .Where(u => u.Events.Any(e => e.EventId == eventId));
}

这应该返回具有与给定 ID 匹配的任何事件的所有用户。

注意:如果您正确设置了您的关系,您应该能够直接从事件中获得此信息。

public class Event
{
    ...
    public virtual ICollection<User> Users { get; set; }
}

那么,您将通过 id 获取事件并访问它的用户集合。

var evt = repo.GetEventById(id);
var users = evt.Users;
于 2013-08-24T14:23:03.170 回答
1

我建议您在您的事件模型本身中这样做。Event您正在使用的AFAIKUserEventUsers表格是 many2many 的标准内容。

public class Event
{
    public int Id { get; set; }
    // ...
    public virtual ICollection<EventUsers> EventUsers { get; set; } // This is table that holds EventId, UserId (many2many)
    public IQueryable<User> Users { get { return this.EventUsers.Select(x => x.User); } } // Get all users that are in this event
}
于 2013-08-24T14:25:13.833 回答