求助使用Expression动态拼LINQ模糊查询时字段可空问题!

luonoby 2014-03-15 10:28:35
因为Expression没有like,所以退而求其次选择contains这种方式,最后生成的Expression类似someList.where(c=>c.Name.contains("someName"))。这句话执行没有问题,但是在Name字段可空,且数据库中该列存在null值时,提示未将对象引用到对象实例。求方法解决。谢谢!
对了,顺便说下,我这是连oracle数据库的,所以不能用linq to sql的SqlMethods类。。
...全文
235 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
MikeCheers 2014-03-15
  • 打赏
  • 举报
回复
你需要的是 c=> null == c.Name ? false : c.Name.contains("someName") someList.where(c=>(c.Name??"").contains("someName")) 这个也不错 只是有浪费
luonoby 2014-03-15
  • 打赏
  • 举报
回复
现在where里头的不是个Lambda表达式么?就是要动态拼这个Lambda表达式啊。。总不能写写Lambda 参数=(c==>(c.Name??....这样吧。。
  • 打赏
  • 举报
回复
someList.where(c=>(c.Name??"").contains("someName")) 这种方式本身就是动态拼SQL,条件变了,只需要把where里面的条件更换了即可,有什么问题?
luonoby 2014-03-15
  • 打赏
  • 举报
回复
额。。因为要用动态linq拼lambda表达式,条件不能写死啊。。
  • 打赏
  • 举报
回复
为什么不直接用someList.where(c=>(c.Name??"").contains("someName")) 这种方式 还要通过Expression.Call?
luonoby 2014-03-15
  • 打赏
  • 举报
回复
我现在拼Expression用的是这样的方法: MethodInfo method=left.Type.GetMethod("Contains"); 之后再用Expression.Call拼接完整。您说的这个应该调用怎样的方法呢? (Contains??)这样?
  • 打赏
  • 举报
回复
修改如下试试
someList.where(c=>(c.Name??"").contains("someName"))
练白龙 2014-03-15
  • 打赏
  • 举报
回复

//加个判断试试
if(!string.IsNullOrEmpty(someName))
{
someList.where(c=>(c.Name??"").contains("someName")) }
MikeCheers 2014-03-15
  • 打赏
  • 举报
回复
或者 你要的是这个
static void Where(Expression<Func<string, Boolean>> act)
{
    List<string> list = new List<string>();

    list.Where<string>(act.Compile());
}

static void Main(string[] args)
{
    Where(name => null == name ? false : name == "someName");
}

110,566

社区成员

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

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

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