我需要返回所有具有某个字段的子对象的对象!= null。
注意:EpicStoryId
是可以为空的int(如'int?')
我试过了:
return _context.Features
.Where(x => x.UserStories.Any(us => us.EpicStoryId.HasValue)
&& x.Id == Id)
.FirstOrDefault();
我尝试过:
return _context.Features
.Where(x => x.UserStories.Any(us => us.EpicStoryId != null)
&& x.Id == Id)
.FirstOrDefault();
并且措施良好:
return _context.Features
.Where(x => x.UserStories.Any(us => us.EpicStoryId.HasValue == false)
&& x.Id == Id)
.FirstOrDefault();
最后:
return _context.Features
.Where(x => x.UserStories.Any(us => us.EpicStoryId > 0)
&& x.Id == Id)
.FirstOrDefault();
但这些都不起作用。无论孩子是否具有Id=Id
的值,它仍然会使用EpicStoryId
返回每个“功能”。 (仅供参考,我查看了数据,并且某些EpicStoryId
的值为空值。)
示例数据:
答案 0 :(得分:2)
Any
将返回true,任何1 EpicStoryId
都有值,这样您的情况就会失败。
All
应该: -
return _context.Features
.FirstOrDefault(x => x.UserStories.All(us => us.EpicStoryId.HasValue)
&& x.Id == Id);
答案 1 :(得分:0)
如果您需要返回所有对象,请不要使用FirstOrDefault()
,请使用.Where()
和.ToList()
方法的组合:
对于我们的 任何 ,EpicStoryIds不是空使用:
return _context.Features
.Where(x => x.Id == Id && x.UserStories.Any(us => us.EpicStoryId.HasValue))
.ToList();
对于我们的 所有 ,EpicStoryIds不为null,您可以使用:
return _context.Features
.Where(x => x.Id == Id && x.UserStories.All(us => us.EpicStoryId.HasValue))
.ToList();
如果您想要返回UserStories
而不是Features
的列表,可以使用:
return _context.Features
.Where(x => x.Id == Id)
.SelectMany(x => x.UserStories
.Where(us => us.EpicStoryId.HasValue))
.ToList();