关于框架Linq查询的问题

本文关键字:Linq 查询 问题 框架 于框架 | 更新日期: 2023-09-27 18:26:32

代码:

IQueryable<Meet> query = _meetReadService.GetRecords()
                                 .Include(x => x.MeetType)
                                 .Where(x => x.EndDateTime <= DateTime.Now);

当我在上面的linq查询中添加以下行时,错误消息被抛出为

Include路径表达式必须引用在类型上定义的导航属性。对引用导航属性使用虚线路径,对集合导航属性使用Select操作符。

x => x.MeetTeamMembers.Where(e => e.MeetType.IsManager)
                      .Select(z => z.User.Name)
                      .FirstOrDefault()

我的完整代码:

 IQueryable<Meet> query = _meetReadService.GetRecords()
           .Include(x => x.MeetType)
           .Include(x => x.MeetTeamMembers.Where(e => e.MeetType.IsManager)
                                          .Select(z => z.User.Name)
                                          .FirstOrDefault())
           .Where(x => x.EndDateTime <= DateTime.Now);

关于框架Linq查询的问题

不能在对Include的调用中进行筛选。这意味着.Where(e => e.MeetType.IsManager)是罪魁祸首。只有在执行查询后才能执行您想要的操作:

IQueryable<Meet> query = _meetReadService.GetRecords()
                                         .Include(x => x.MeetType)
                                         .Include(x => x.MeetTeamMembers)
                                         .Select(z => z.User.Name).FirstOrDefault())
                                         .Where(x => x.EndDateTime <= DateTime.Now);
var queryResults = query.ToList();
foreach (var meet in queryResults) 
{
    meet.MeetTeamMembers = meet.MeetTeamMembers.Where(e => e.MeetType.IsManager);
}