我有这条线:

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都不重要。

关于c# - LINQ条件,仅当prop不为null时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40303453/

10-10 20:05