我有一个带有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。有任何想法吗?
答案 0 :(得分:0)
最好在代码到达Any
之前对数据进行规范化。我建议您删除大多数空值,并仅保留特定的“ G6”需求,例如
privateorders.Where(ord => !string.IsNullOrEmtpy(ord.Code) || ord.10code = "G6")
.Any( …_)
因此已将它们从考虑中删除。根据需要计算出Where
的逻辑。
答案 1 :(得分:-1)
尝试以下操作:
results = privateorders.Where(a => a.strHead == value.Code ||
(a.10Code == value.10Code) ||
(value.Complaint != null &&
a.strHead == value.Complaint.9Code)).ToList();