在LINQ中获取项目,其中子实体满足特定条件

时间:2013-08-14 18:32:40

标签: c# linq list nhibernate

我正在尝试返回 TrackInformationRecord 列表,完成时间为:

return _trackInformationRepository
           .Fetch(t => t.TrackPartId == trackPart.Id && t.IsDeleted == false)
           .ToList();

但是,TrackInformationRecord包含TrackInformationRecord.Sessions中的SessionInformationRecord列表,我只想使用IsDeleted == false的Sessions。

我尝试了以下但是没有用:

return _trackInformationRepository
      .Fetch(t => t.TrackPartId == trackPart.Id && t.IsDeleted == false 
         && t.Sessions.Where(s => s.IsDeleted == false))
      .ToList();

任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

如果你想确保所有Session的对象IsDeleted都是false,你需要All

return _trackInformationRepository
      .Fetch(t => t.TrackPartId == trackPart.Id && !t.IsDeleted
                   && t.Sessions.All(s => !s.IsDeleted)).ToList();

但是如果你希望任何Session的对象IsDeleted为false,你需要Any -

return _trackInformationRepository
      .Fetch(t => t.TrackPartId == trackPart.Id && !t.IsDeleted
                   && t.Sessions.Any(s => !s.IsDeleted)).ToList();

在旁注中,您可以像t.IsDeleted == false一样编写!t.IsDeleted,而不是写{{1}}。