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(("查詢條件")

 

寫的有點倉促也不知道之前使用的時候是否還有其他情況發生,暫時也就想到這三條需要特別注意的。日后工作中如遇到問題在來擴充吧,就先寫到這里了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM