实体框架多对多查询

Mis*_*sky 3 linq entity-framework-5

我想写一个简单的查询,但有一些问题.我有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)); ??
}
Run Code Online (Sandbox Code Playgroud)

有些东西不见了,我不知道什么,有人可以帮助我吗?非常感谢 !

tva*_*son 7

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

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

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

注意:如果您正确设置了关系,则应该可以直接从事件中获取此关系.

public class Event
{
    ...
    public virtual ICollection<User> Users { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

那么,你将通过id获取Event并访问它的用户集合.

var evt = repo.GetEventById(id);
var users = evt.Users;
Run Code Online (Sandbox Code Playgroud)