在带有 Linq 的实体框架中使用 LIKE "%%%"? [复制]

Posted

技术标签:

【中文标题】在带有 Linq 的实体框架中使用 LIKE "%%%"? [复制]【英文标题】:Use LIKE "%%%" in Entity Framework with Linq? [duplicate]在带有 Linq 的实体框架中使用 LIKE "%%%"? [复制] 【发布时间】:2017-03-18 04:18:17 【问题描述】:

我尝试向我的数据库发出请求,我想使用 SQL 中的“LIKE”运算符来解决此模式:%%% 使用“SQL 友好”语法。 目前我的请求如下所示:

var routelist = (from dbHost in db.Hosts
                             where dbHost.Host == host
                             join dbRoute in db.Route on dbHost.HostsId equals dbRoute.HostId
                             select dbRoute).ToList();

如果有人知道怎么做,他可以告诉我吗?谢谢

编辑:

我想做类似的事情:

var routelist = (from dbHost in db.Hosts
                             where dbHost.Host == host
                             join dbRoute in db.Route on dbHost.HostsId equals dbRoute.HostId
                             where dbRoute.alias like "%%%"
                             select dbRoute).ToList();

【问题讨论】:

您是否在 linq 中搜索通配符?在这种情况下,这可能会对您有所帮助:***.com/questions/1040380/wildcard-search-for-linq @Mickey 我认为这就是我要寻找的,但是这种方式是否经过优化?是只过滤请求结果还是只选择数据库中的正确字段? 【参考方案1】:

Entity Framework Core 2.0 现在有可用的EF.Functions 属性,其中包括EF.Functions.Like()

https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-entity-framework-core-2-0/

例子:

var customers =
    from c in context.Customers
    where EF.Functions.Like(c.Name, "a%");
    select c;

【讨论】:

【参考方案2】:

当我需要使用实体框架执行此类 LIKE 查询时(这种情况很少发生,因为此类查询通常不能使用任何索引,因此执行全表扫描并且在大表上非常慢),我使用 PATINDEX ,像这样:

var routelist = (from dbHost in db.Hosts
                         where dbHost.Host == host
                         join dbRoute in db.Route on dbHost.HostsId equals dbRoute.HostId
                         where SqlFunctions.PatIndex("%%%",dbRoute.alias) > 0
                         select dbRoute).ToList();

sql server 中PATINDEX 函数类似于LIKE,但返回第一个匹配的位置。

如果你想以 "%something%" 的形式执行 LIKE 查询,你可以使用 Contains("something")。如果它具有“%something”的形式 - 使用 StartsWith("something")。如果它的形式是 "something%" - 使用 EndsWith("something")。

【讨论】:

这似乎正是我所需要的,但它似乎也不存在于 ASP.NET Core 上(实际上,System.Data.Object 似乎不存在)跨度> 没错,没有注意到它与 EF Core 有关。好吧,那里尚不支持此类功能(不确定如何将其用于当前状态下的任何严重问题)。您可以尝试使用 FromSql 的解决方法,如下所述:github.com/aspnet/EntityFramework/issues/3325

以上是关于在带有 Linq 的实体框架中使用 LIKE "%%%"? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

实体框架 Linq 查询:.Where 链 vs &&

像实体框架中的运算符?

.NET 6 带有实体框架的新 LINQ 功能

带有存储过程的实体框架 VS LINQ to SQL VS ADO.NET? [关闭]

为啥实体框架不能在 LINQ 语句中使用 ToString()?

实体框架,LINQ:不能在 StartsWith 中使用 Any?