我该怎么做:
customers.where(c=>c.Name **like** "john");
我知道这是不可能的,但我想知道我怎么能有类似的东西。
答案 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()));
这样的事情。