我想写一个简单的查询,但是有一些问题。 我有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)); ??
}
缺少一些东西,我不知道什么,有人可以帮助我吗?非常感谢!
答案 0 :(得分: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获取Event并访问它的用户集合。
var evt = repo.GetEventById(id);
var users = evt.Users;
答案 1 :(得分:1)
我建议你在你的活动模型中做到这一点。 AFAIK您使用的是Event
,User
和EventUsers
表,这些表是很多人的标准内容。
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
}