如何使用LINQ进行LIKE查询?

49

如何在Linq中执行LIKE查询?

我想执行以下查询:

var results = from c in db.costumers
              where c.FullName LIKE "%"+FirstName+"%,"+LastName
              select c;
8个回答

46
尝试使用string.Contains()与EndsWith()结合起来使用。
var results = from c in db.Customers
              where c.FullName.Contains (FirstName) && c.FullName.EndsWith (LastName)
              select c;

我更喜欢这个,而不是SqlMethods。 - Tom Stickel
2
like 查询不同,这种查询是区分大小写的。 - Protector one
1
如果使用Entity Framework,此查询将被转换为SQL LIKE语句,因此其大小写敏感性取决于列/表/数据库的排序规则。 - Marc Climent

46

你可以使用SqlMethods.Like(matchExpression,pattern)函数。

var results = from c in db.costumers
              where SqlMethods.Like(c.FullName, "%"+FirstName+"%,"+LastName)
              select c;

在LINQ to SQL之外使用此方法将始终引发NotSupportedException异常。


我没有时间在这个问题上瞎折腾:在 SqlMethods.Like(s.Email, id + "%") 这里出现了错误(是的,我已经使用了 using System.Data.Linq.SqlClient;),我改成了 where s.Email.Contains(id),虽然它们不完全相同,但我可以通过改为 EndsWith 来使其工作。 - Tom Stickel
7
对于 EF Core,使用 Microsoft.EntityFrameworkCore.EF.Functions.Like(c.FullName, $"%{fullName}%") 进行模糊查询。 - Alternatex
我也认为SqlMethods.Like有问题,但我的.NET Framework版本只有4.8,需要升级到4.8.1。 - Bolle

18

试试这样做

var results = db.costumers.Where(X=>X.FullName.Contains(FirstName)&&(X=>X.FullName.EndsWith(LastName))
                          .Select(X=>X);

4
为什么不使用 '&&' 运算符,而是使用双 Where 子句? - Max
@MaxMommersteeg:谢谢,已更新。 - Thorin Oakenshield
1
@max 为什么不用两个where子句?如果每个“where”子句都在自己的一行上,那么如果有许多长条件,这将使代码更易读。 - Phil1970
1
这应该是答案。@Phil1970 如果您有超过3个条件,Double Where将是一个不错的选择。尽管这是我的个人意见。 - SouravOrii

6

2019年已经到来:

需要使用EF6。

using System.Data.Entity;
string searchStr ="bla bla bla";
var result = _dbContext.SomeTable.Where(x=> DbFunctions.Like(x.NameAr, string.Format("%{0}%", searchStr ))).FirstOrDefault();

1
不仅需要EF6,还需要EF 6.2.0。https://learn.microsoft.com/en-us/dotnet/api/system.data.entity.dbfunctions.like?view=entity-framework-6.2.0 - Wangsu
1
只是想说,在这个例子中可能多余使用.FirstOrDefault(),因为您可能不仅想要一个结果。 - Literate Corvette

5
 where c.FullName.Contains("string")

4
String [] obj = (from c in db.Contacts
                           where c.FirstName.StartsWith(prefixText)
                           select c.FirstName).ToArray();
            return obj;

StartsWith()和EndsWith()可以在这里帮助你很多。如果你想在字段中查找数据,那么可以使用Contains()。


2
您可以使用包含:
string[] example = { "sample1", "sample2" };
var result = (from c in example where c.Contains("2") select c);
// returns only sample2

0

var StudentList = dbContext.Students.SqlQuery("Select * from Students where Email like '%gmail%'").ToList<Student>();

用户可以在Linq中使用这种类似的查询,并填充学生模型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接