C# linQ实现LIKE查询的问题,如果字段是空值怎么办

fjzlh 2014-10-26 03:44:17
在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语句里能实现吗?
...全文
925 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏德帝 2016-05-01
  • 打赏
  • 举报
回复
List = List.Where(c => c.Name.Contains(keywords) || c.Attribute.Value.Contains(keywords) || c.Description.Value.Contains(keywords)).ToList(); 加Value , 有值就比较,无值不比较。
牛兜兜 2016-05-01
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
var result = (from c in List
                where keywords == null || c.Name.Contains(keywords) || c.Attribute.Contains(keywords) || c.Description.Contains(keywords)
                select c).ToList();
想查出包含条件的数据,且数据不为null
  • 打赏
  • 举报
回复
另外,注意不要把 Linq DB Provider 说成是 Linq。那是两个不同的东西。每一个数据库 Provider 都有自己不同的规则来处理“空”。
  • 打赏
  • 举报
回复
引用 4 楼 fjzlh 的回复:
你可能理解错了,我说的不是查询关键字为空,而是数据库记录中另外两列是可为空的,即记录中存在字段为空的情况,而用contains进行null与keywords的判断是会出错的。
数据库记录?那么你知道如何判断“数据库记录中的列为空”吗?结果写法当然是一样的了。
exception92 2014-10-26
  • 打赏
  • 举报
回复
在类中 给它个默认值。

  private bool? _hasError = false;
        public bool? hasError
        {
            get { return _hasError; }
            set
            {
                _hasError = value;

            }
        }
fjzlh 2014-10-26
  • 打赏
  • 举报
回复
你可能理解错了,我说的不是查询关键字为空,而是数据库记录中另外两列是可为空的,即记录中存在字段为空的情况,而用contains进行null与keywords的判断是会出错的。
  • 打赏
  • 举报
回复
实际上,你不应该在 Linq 表达式中作判断,应该在这条语句之前就判断。
  • 打赏
  • 举报
回复
var result = (from c in List
                where keywords == null || c.Name.Contains(keywords) || c.Attribute.Contains(keywords) || c.Description.Contains(keywords)
                select c).ToList();
D56233577 2014-10-26
  • 打赏
  • 举报
回复
延迟查询,if中用String.IsNullOrWhiteSpace判断。散分吧。

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧