Linq – 如果field为null,则检查where子句中的条件

我有疑问 – 即使项目没有参考,如何检查where子句中的条件?

最基本的方式 – 我正在检查我的类中的字段,它可以为null。 当我以这种方式检查它时,它将返回Null Reference Exception

var soldOutProducts = from p in list where p.destinataire.StartsWith("D") select p; 

你可以做

 var soldOutProducts = from p in list where !string.IsNullOrEmpty(p.destinataire) and p.destinataire.StartsWith("D") select p; 

首先检查null,就像在循环中编写正常的C#代码一样。

 where p.destinataire != null && p.destinataire.StartsWith("D") 

如果p本身可以为null(即您的列表可以包含null元素),那么您还需要检查它:

 where p != null && p.destinataire != null && p.destinataire.StartsWith("D") 

请注意,如果您的查询表达式只是进行过滤,则可能需要使用点表示法:

 var soldOutProducts = list.Where(p => p.destinataire != null && p.destinataire.StartsWith("D")); 

查询表达式在查询变得复杂时非常有用 – 特别是在连接和分组时。

  var soldOutProducts = from p in list where p.destinataire != null && p.destinataire.StartsWith("D") select p;