LINQ条件,仅当prop不为空时
本文关键字:prop 条件 仅当 LINQ | 更新日期: 2023-09-27 18:15:33
我有这样一行:
products = products.Where(p => p.Brand.Equals(s) ||
p.CatCodeNaam.Equals(s) ||
p.SubCategoryName.Equals(s)).ToList();
这很好,直到没有SubCategoryName
。
所以我试了:
var t = products.Where(p => p.Brand.Equals(s) ||
p.CatCodeNaam.Equals(s))
.Where(p => !string.IsNullOrWhiteSpace(p.SubCategoryName) && p.SubCategoryName.Equals(s));
但是如果没有SubCategoryName
,它应该忽略它并且不进行过滤,因此没有空集合。
我知道我可以通过让数据库返回一个空字符串isnull(SubCategoryName,'') as SubCategoryName
来修复它,但我不希望这样。我正在寻找一个LINQ修复。
一些测试数据来解释我的问题:
我有一个关键字数组,如:
"car", "ford", "focus"
我用foreach
迭代关键字数组。
由于我不知道关键字是品牌,类别还是子类别,我必须检查它是否是其中之一。但是数据集products
中的对象在子类别中具有空值,导致第一行崩溃。
逆转条件:
s.Equals(p.SubCategoryName)
这样p.SubCategoryName
为null就不重要了
我很抱歉,如果我没有正确理解,但它不是这样工作的吗?
products = products.Where(p => p.Brand.Equals(s) ||
p.CatCodeNaam.Equals(s) ||
p.SubCategoryName == null ||
p.SubCategoryName.Equals(s)).ToList();