如何在LINQ Where子句中查询EF6集合属性?

时间:2015-07-03 09:03:17

标签: c# .net entity-framework entity-framework-6

我正在尝试使用以下查询从数据库中提取组模型:

var group = await _context.Groups
    .Where(g => g.ID == dto.GroupID && g.Users.Contains(user))
    .FirstOrDefaultAsync();

dto是通过Web API发送的请求DTO,user是ASP.NET IdentityUser。

这会引发异常,因为Entity Framework无法将用户转换为常量。有没有办法实现这个查询?

我在以下代码中有另一种选择:

var reportingGroup = user.Groups
    .FirstOrDefault(rg => dto.GroupID == rg.ID);

但是我想避免在用户的延迟加载的Groups集合上进行同步查找。

1 个答案:

答案 0 :(得分:2)

更正确的方法是按Id匹配用户,而不是整个User对象。所以考虑改变

g.Users.Contains(user)

g.Users.Any(u=>u.Id==user.Id)