我正在尝试通过一个列表进行简单的任务循环,如果列表中的属性之一包含一个值,则应将其评估为true。但是由于某种原因,该值始终返回true,并且列表的计数大于0。
var goodsIssuesSubmitted = _goodsissueRepository
.Where(gi => gi.attributes.Status == "Submit")
.ToList();
var submittedTr = goodsIssuesSubmitted
.Select(gi => gi.relationships.data.Where(g => g.TransportId == _transportId))
.ToList();
if (submittedTr != null && submittedTr.Count > 0)
{
goodsIssueHasbeenSubmitted = true;
}
如果根据指定的条件从列表中未返回任何项目,如何使goodsIssueHasbeenSubmitted
的计算结果为false。
答案 0 :(得分:0)
问题是,当您投影goodsIssuesSubmitted
集合以返回Where
条件的结果时,goodsIssuesSubmitted
中每个项目的作用是返回子项目的集合匹配g.TransportId == _transportId
的嵌套条件。
然后在if语句中,您仅检查submittedTr
集合中项目的存在,而不检查这些项目包含的内容。因此,在非空goodsIssuesSubmitted
集合的情况下,第二个条件是不相关的,因此是观察到的行为。要解决此问题,将第二个Select
和Where
更改为Any
。
您还可以简化查询,如下所示:
goodsIssueHasbeenSubmitted =_goodsissueRepository.Any(i =>
i.attributes.Status == "Submit" &&
i.relationships.data.Any(g => g.TransportId == _transportId)))