评估列表中的项目是否具有满足条件的属性

时间:2018-09-12 17:54:40

标签: c# linq

我正在尝试通过一个列表进行简单的任务循环,如果列表中的属性之一包含一个值,则应将其评估为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。

1 个答案:

答案 0 :(得分:0)

问题是,当您投影goodsIssuesSubmitted集合以返回Where条件的结果时,goodsIssuesSubmitted中每个项目的作用是返回子项目的集合匹配g.TransportId == _transportId的嵌套条件。

然后在if语句中,您仅检查submittedTr集合中项目的存在,而不检查这些项目包含的内容。因此,在非空goodsIssuesSubmitted集合的情况下,第二个条件是不相关的,因此是观察到的行为。要解决此问题,将第二个SelectWhere更改为Any

您还可以简化查询,如下所示:

goodsIssueHasbeenSubmitted =_goodsissueRepository.Any(i => 
    i.attributes.Status == "Submit" && 
    i.relationships.data.Any(g => g.TransportId == _transportId)))