• Lambda表达式Contains方法(等价于SQL语句中的like)使用注意事项


    貌似已经半年多没写一篇帖子了,充分的说明要么老总一天折腾的让人心齐疲惫,没心情去写;要么另外一种可能就是自己不思进取,说白了就是懒。好在这种状态在今天被打破了。MoNey加油。

    众所周知,想在EntityFrame实体框架中使用类似于SQL语句中like的效果时就的使用Contains方法了。

    可是关于Contains方法使用过程中会出现的细节问题,并没有专门的文章来指出来。

    小弟才疏学浅,一直只做些b/s开发,因此对于SQL的高级应用不需要接触,长期使用Lambda 表达式的过程中,已经彻底忘记SQL语句如何编写,增删改查基本语句也只会写个简单的select语句而已,所以此篇文章不涉及任何SQL知识。

    1、使用Contains方法的必备条件:

    Contains等价于SQL中的like语句。不过Contains只针对于字符串(string)类型的数据而言。如果是int等数值类型,则不会有Contains方法的存在,因此数值字段貌似无法通过使用Lambda表达式来完成like操作。因此在使用实体框架的同时,设计数据的时候如果想使用like请确保数据库字段为字符串类型(text、varchar等)。否则在想模糊查询的时候让你痛苦不堪。

    2、Contains方法关联方法(均等价于SQL中的like[注意:这里为什么会说是等价呢,因为如下列出的方法均为Stirng里的方法。like的应用是不分字符类型的,数值行亦可]):

    Contains等价于like '%key%' 指示指定的 String 对象是否出现在此字符串中。

    EndsWith等价于like '%key' 确定此字符串实例的结尾是否与指定的字符串匹配。

    StartsWith等价于like 'key%'  确定此字符串实例的开头是否与指定的字符串匹配。

    3、使用Contains方法时前往不要忘记非NULL的判断:

    写这边文章的原因来自,今天在使用Contains来做查询的时候,一直报错(未将对象引用设置到对象的实例。)。

    一开始百思不得其解,经过跟踪和调试最后才发现数据库中如果存在值为NULL的值。

    为什么会报错,看看如下的代码,想必大家也就知道其中的所以然了。
    string str = null;
    str.Contains("报错啦");//这里会报“未将对象引用设置到对象的实例。”错

    因此不要忘记将代码

    o.SearchKeyword.Contains("查询条件")

    改写为:

    o.SearchKeyword != null && o.SearchKeyword.Contains(("查询条件")

    写的有点仓促也不知道之前使用的时候是否还有其他情况发生,暂时也就想到这三条需要特别注意的。日后工作中如遇到问题在来扩充吧,就先写到这里了。

  • 相关阅读:
    DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear]])
    将BYTE[]中的字符的16进制形式作为字符串存入CString对象并返回
    VC调用存储过程的通用方法(ORACLE篇)
    Oracle中插入Date数据
    Oracle 存储过程返回结果集怎么这么费劲?
    从字符串中提取BCD码,转换为UINT数据并返回
    Know more about AWR Parse Statistics
    Slide:了解Oracle在线重定义online redefinition
    11gR2新特性:LMHB Lock Manager Heart Beat后台进程
    利用Oracle在线重定义Online Redefinition清理历史数据
  • 原文地址:https://www.cnblogs.com/niyl/p/9686174.html
Copyright © 2020-2023  润新知