簡體   English   中英

就像在Lambda Expression和LINQ中一樣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM