AsQueryable().Where(where) where中包含 Contains("中文”)查询不到数据的问题。

小辛、 2015-02-02 11:36:51
由于where条件不确定 所以必须使用 Expression<Func<TEntity, bool>> expWhere 在前端进行的拼接条件查询。


在项目应用中 出现的问题是。在list中list.AsQueryable().Where(where) 当where条件里包含了 Contains()的时候 就查询不到数据

但是如果查询条件是 str== “123” 的时候就可以查询到 str.Contains(“123”)的时候就是空的。 这是啥原因?

谁能帮忙想想有啥解决办法么?
...全文
680 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小辛、 2015-02-03
  • 打赏
  • 举报
回复
感谢以上各位的解答。 已经找到了原因为啥用Contains查询不到数据的问题了。 根本原因在于 x.name.Contains("123")的时候 name有存在null的情况。 导致空引用了。
  • 打赏
  • 举报
回复
你的Where 中 只有一个 str.Contains(“123”) 条件?
lincolnandlinda 2015-02-02
  • 打赏
  • 举报
回复
从现在看不出问题在哪里,你把相关的代码贴出来看下
  • 打赏
  • 举报
回复
首先,你要确定是不是非要去学什么 Expression<> 这种东西。 其次,要确定一下你使用什么数据库驱动,它是否支持 Contains。不同驱动实现的功能不同。
  • 打赏
  • 举报
回复
引用 楼主 liujian650107 的回复:
由于where条件不确定 所以必须使用 Expression<Func<TEntity, bool>> expWhere 在前端进行的拼接条件查询。
没听说过“条件不确定,于是就必须”使用这个玩意儿! 我们直接写
var query1 = from x in new Tst().Table
                where x.Id > -100
                select x;
if (1 < 2)
{
    query1 = from x in query1
                where x.name.Contains("a")
                select x;
}
如果你打印 query.ToString() 你也可以看到它将动态增加的条件正确翻译到sql中了。 不用那种复杂的什么“表达式”。

111,097

社区成员

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

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

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