[英]Like in Lambda Expression and LINQ
我該怎么做這樣的事情:
customers.where(c=>c.Name **like** "john");
我知道這是不可能的,但我想知道我怎么能有類似的東西。
customers.Where(c => c.Name.Contains("john"));
如果要將LINQ定位到SQL,請使用SqlMethods.Like :
customers.Where(c => SqlMethods.Like(c.Name, "%john%"));
說明:
編譯器將從上面的語句生成表達式樹。 由於LIKE
是SQL特定的構造,並不是所有LINQ Query提供程序所SqlMethods
,因此SqlMethods
類及其成員用作表達式編譯器(將表達式樹編譯為SQL)的“提示”以發出LIKE
語句。
想到的第一個想法是Regex.IsMatch
。
這最接近於提供從LIKE
獲得的功能; 例如,你可以這樣做:
var matches = people.Where(p => Regex.IsMatch(p.Name, "A.*[mn]"));
foreach (Person match in matches)
{
Console.WriteLine(match.Name);
}
得到這樣的輸出:
Adam Aaron Aidan
如果您的意圖只是在Name
查找特定的子字符串, string.Contains
就像其他人所建議的那樣。
using System.Data.Linq.SqlClient;
...
customers.where(c=>SqlMethods.Like(c.Name, "john"));
在where語句中使用Regex.IsMatch
,或者在沒有通配符的情況下使用更簡單的版本:
customers.where(c=>c.Name.Contains("john"));
這是我的代碼:
string s="somethings";
customers.Where(c => c.Name != null && c.Name.ToLower().Contains(s.ToLower()));
像這樣的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.