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

本文关键字:查询 EF6 集合 属性 子句 LINQ Where | 更新日期: 2023-09-27 18:00:53

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

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

dto是通过Web API发送的请求DTO,user是ASP.NET标识用户。

这引发了一个异常,因为实体框架无法将用户转换为常量。有什么方法可以实现这个查询吗?

我在以下代码中有一个替代方案:

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

但我希望避免对用户的延迟加载的Groups集合进行同步查找。

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

更正确的做法是通过Id而不是通过整个User对象来匹配用户。所以考虑改变

g.Users.Contains(user)

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