首页 > 解决方案 > C# 中的 Linq 语句,带有 Any() 的多个过滤器

问题描述

我有一个带有 LINQ 语句的片段,需要对下面的问题语句进行修改。

var orders = ordersets.Where(OrderSetIsOk).ToList(); 
var orderOther = ordersets.Except(orders).ToList();

private bool OrderSetIsOk(OrderSet value)
{
    bool result = false;
    var privateorders = user.privateorders;

    result = privateorders.Any(a => a.strHead == value.Code ||
                                    (a.10Code == value.10Code) ||
                                    (value.Complaint != null &&
                                     a.strHead == value.Complaint.9Code));

    return result;
}

我有这样的示例订单集:

A : value.10code = "B6"; value.Code = "" 
B : value.10code = "G6"; value.code = ""
c : value.10code = "G6"; value.code = "189"

问题:当 a.strHead 为 "" 且 value.code = "189" 且 value.10code = "G6" 时。B 和 C 应该返回 true,但 A 应该返回 false。我需要更改 Any 语句,以便 A 返回 false,但 B 和 C 返回 true。有任何想法吗?

标签: c#linq

解决方案


最好在代码到达Any. 我建议您删除大多数空值并仅保留特定的“G6”需求,例如

 privateorders.Where(ord => !string.IsNullOrEmtpy(ord.Code) || ord.10code = "G6")
              .Any( …_)

因此,它们已被排除在考虑之外。根据需要制定Where逻辑。


推荐阅读