就像在Lambda Expression和LINQ中一样

时间:2010-09-01 08:28:32

标签: c# linq lambda

我该怎么做:

customers.where(c=>c.Name **like** "john");

我知道这是不可能的,但我想知道我怎么能有类似的东西。

6 个答案:

答案 0 :(得分:69)

customers.Where(c => c.Name.Contains("john"));

答案 1 :(得分:30)

如果您的目标是LINQ to SQL,请使用SqlMethods.Like

customers.Where(c => SqlMethods.Like(c.Name, "%john%")); 

说明:

编译器将从上面的语句生成表达式树。由于LIKE是SQL特定的构造,并不是所有LINQ查询提供程序所共有的,因此SqlMethods类及其成员用作表达式编译器(将表达式树编译为SQL)的“提示” LIKE声明。

答案 2 :(得分:9)

首先想到的是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一样,几乎肯定更可取。

答案 3 :(得分:5)

using System.Data.Linq.SqlClient;
...
customers.where(c=>SqlMethods.Like(c.Name, "john"));

答案 4 :(得分:2)

在where语句中使用Regex.IsMatch或在没有通配符等的情况下使用更简单的版本:

customers.where(c=>c.Name.Contains("john"));

答案 5 :(得分:1)

这是我的代码:

string s="somethings";

customers.Where(c => c.Name != null && c.Name.ToLower().Contains(s.ToLower()));

这样的事情。