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中的对象在子类别中具有空值,导致第一行崩溃。

LINQ条件,仅当prop不为空时

逆转条件:

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();