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

问题描述

在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,有值就比较,无值不比较。

时间: 2025-01-20 19:11:21

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

LINQ根据id查询数据,但数据id是不连续的,如何先判断该id的数据项是否存在

问题描述 LINQ根据id查询数据,但数据id是不连续的,如何先判断该id的数据项是否存在 Random rnd = new Random(); //获取最大的id DataClasses1DataContext db = new DataClasses1DataContext(); var q = db.Table1.Max(p => p.id); int number = rnd.Next(1, q); //根据随机的id加载 var x = db.Table1.Single(m => m

继LINQ动态组合查询PredicateExtensions讲解

        在LINQ动态组合查询中我留下了一个问题就是PredicateExtensions.在这里很简单不需要什么多的基础只要比会And.Or逻辑运算数学知识就够了. 先贴上代码好分析:   代码 public static class PredicateExtensions     {         public static Expression<Func<T, bool>> True<T>() { return f => true; }      

select-C# LINQ 数据绑定及查询

问题描述 C# LINQ 数据绑定及查询 刚开始,不懂绑定语法是哪个,怎样限制多条件,多表联合查询 某个数据. public decimal ZhiXingShuLiang(Guid HeTongHao, Guid HuoWei) { //初始化查询条件 Expression> whereLamdba = null; whereLamdba = whereExpression.And(whereLamdba, x => x.ID_HeTong == HeTongHao); whereLamdb

数据-linq to sql 查询问题,请指教

问题描述 linq to sql 查询问题,请指教 我有三个表,A表:id,departmentcode,suppliercode b表:departmetcode c表"suppliercode怎么样用linq to sql 把这三个表连接起来.然后根据A表的查询条件显示呀比如A表的id=1,我一查询就出现多条记录, 我现在是想显示一条记录,然后把b表,c表的数据代出来. 解决方案 var result =from a in tableA join b in Tableb on a.depat

sql-SQL 三张表联合查询中间表有空字段的问题

问题描述 SQL 三张表联合查询中间表有空字段的问题 table1(id1).table2(id2id1no).table3(noname)select t3.name from table1 t1(nolock) inner join table2 t2(nolock)on t1.id1 = t2.id1inner join table3 t3(nolock)on t2.no = t3.no第2张表里面对应的no字段有可能为空,为空的时候就取不到name而不是取no为空的name字段 解决方案

select-oracle 子查询中有两个字段,怎么同时查出来

问题描述 oracle 子查询中有两个字段,怎么同时查出来 比如说:select a.id,a.name,(select sum(b.count),a.num-sum(b.count) from b) from a; 有这么一个语句,我想一下在b表里查出两个值来,作为两列字段跟a.id a.name两列的值同时都显示出来,但是我上面的写法会报错.不知道括号里的情况该怎么处理? ps:当然我只是举了个例子,具体的语句要比这个复杂的多,求指点 解决方案 select a.id,a.name,c.co

sql-SQL 三张表联合查询其中表有空字段的问题

问题描述 SQL 三张表联合查询其中表有空字段的问题 table1(id1).table2(id2id1no).table3(noname) select t3.name from table1 t1(nolock) inner join table2 t2(nolock)on t1.id1 = t2.id1inner join table3 t3(nolock)on t2.no = t3.no 第2张表里面对应的no字段有可能为空,为空的时候name就为空,这个要怎么查询才不会有冗余,请指教

c/c++-使用 mysql c api 中,预处理查询条件 当过滤字段是字符串时

问题描述 使用 mysql c api 中,预处理查询条件 当过滤字段是字符串时 #include <stdio.h> #include <mysql/mysql.h> #include <string.h> int main(void) { // declares MYSQL * connection = NULL; MYSQL_STMT * stmt = NULL; MYSQL_BIND bind[3]; MYSQL_BIND inbind; // preproce

oracle-oracal多表关联查询,如下表,关联字段的值都保留,其他字段的值没有就用0补充

问题描述 oracal多表关联查询,如下表,关联字段的值都保留,其他字段的值没有就用0补充 tb1 ID 区域 信息 1 A 11111 2 B 2222 3 C 3333 4 D 444444 5 E 555555 6 F 66666 tb2 区域 可控量 A 5 B 11 E 27 tb3 区域 收入 A 62 B 310 G 448 H 87 查询结果: 区域 可控量 收入 A 5 62 B 11 310 C 0 0 D 0 0 E 27 0 F 0 0 G 0 448 H 0 87 解决