Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ条件,其中仅当prop不为null时_C#_Linq - Fatal编程技术网

C# LINQ条件,其中仅当prop不为null时

C# LINQ条件,其中仅当prop不为null时,c#,linq,C#,Linq,我有一句话: products = products.Where(p => p.Brand.Equals(s) || p.CatCodeNaam.Equals(s) || p.SubCategoryName.Equals(s)).ToList(); 这很好,直到没有子类别名称 所以我试着: var t = products.Where(p => p.Brand

我有一句话:

products = products.Where(p => p.Brand.Equals(s) ||
                               p.CatCodeNaam.Equals(s) ||
                               p.SubCategoryName.Equals(s)).ToList();
这很好,直到没有
子类别名称

所以我试着:

var t = products.Where(p => p.Brand.Equals(s) ||
                            p.CatCodeNaam.Equals(s))
                .Where(p => !string.IsNullOrWhiteSpace(p.SubCategoryName) && p.SubCategoryName.Equals(s));
但是如果没有
子类别名称
,它应该忽略它,不进行过滤,这样就不会有空集合

我知道我可以通过让数据库返回一个空字符串
isnull(SubCategoryName“”)作为SubCategoryName
来修复它,但我不希望这样。我正在寻找一个LINQ修复

一些测试数据解释了我的问题:

我有一个包含如下关键字的数组:

"car", "ford", "focus"
我用
foreach
遍历关键字数组


由于我不知道关键字是品牌、类别还是子类别,我必须检查它是否是其中之一。但是数据集
products
中的某些对象在子类别中有空值,导致第一行崩溃。

如果我没有正确理解,我很抱歉,但它不是这样工作的:

products = products.Where(p => p.Brand.Equals(s) || 
                               p.CatCodeNaam.Equals(s) || 
                               p.SubCategoryName == null || 
                               p.SubCategoryName.Equals(s)).ToList();
改变条件:

s.Equals(p.SubCategoryName)

这样一来,如果
p.SubCategoryName
为空就无关紧要了。

为什么不希望返回一个空集合?你想退回什么?为什么你认为这比一个空集合好?简单的建议:改变条件:
s.Equals(p.subcategory name)
@ManfredRadlwimmer就是这样。我知道这很简单#星期五,你能把它作为一个答案贴出来,这样我就可以标记它已被回答了吗?这就是他所描述的,正如@Farhad Jabiyev所建议的那样。听起来很奇怪,他想选择“所有子类别名称为NULL的字段,或者在Brand、CatCodeNaam、subcategory名称字段中有字符串的字段?”?然后我也会这样做,只是把p.subcategory name==null作为第一个检查。@CetinBasoz它记得我