问题描述
在LINQ中因为做一个模糊查询,三个字段做类似sql中的like查询List=List.Where(c=>c.Name.Contains(keywords)||c.Attribute.Contains(keywords)||c.Description.Contains(keywords)).ToList();由于Attribute,Description这两个字段可能为空值导航查询的时候出现System.NullReferenceException:未将对象引用设置到对象的实例的错误提示,有什么办法可以做一个为空值的时候判断处理顺,直接在LINQ语句里能实现吗?
解决方案
解决方案二:
延迟查询,if中用String.IsNullOrWhiteSpace判断。散分吧。
解决方案三:
varresult=(fromcinListwherekeywords==null||c.Name.Contains(keywords)||c.Attribute.Contains(keywords)||c.Description.Contains(keywords)selectc).ToList();
解决方案四:
实际上,你不应该在Linq表达式中作判断,应该在这条语句之前就判断。
解决方案五:
你可能理解错了,我说的不是查询关键字为空,而是数据库记录中另外两列是可为空的,即记录中存在字段为空的情况,而用contains进行null与keywords的判断是会出错的。
解决方案六:
在类中给它个默认值。privatebool?_hasError=false;publicbool?hasError{get{return_hasError;}set{_hasError=value;}}
解决方案七:
引用4楼fjzlh的回复:
你可能理解错了,我说的不是查询关键字为空,而是数据库记录中另外两列是可为空的,即记录中存在字段为空的情况,而用contains进行null与keywords的判断是会出错的。
数据库记录?那么你知道如何判断“数据库记录中的列为空”吗?结果写法当然是一样的了。
解决方案八:
另外,注意不要把LinqDBProvider说成是Linq。那是两个不同的东西。每一个数据库Provider都有自己不同的规则来处理“空”。
解决方案九:
引用2楼sp1234的回复:
varresult=(fromcinListwherekeywords==null||c.Name.Contains(keywords)||c.Attribute.Contains(keywords)||c.Description.Contains(keywords)selectc).ToList();
想查出包含条件的数据,且数据不为null
解决方案十:
List=List.Where(c=>c.Name.Contains(keywords)||c.Attribute.Value.Contains(keywords)||c.Description.Value.Contains(keywords)).ToList();加Value,有值就比较,无值不比较。