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

标签: c# entity-framework linq asp.net-core asp.net-core-mvc


【解决方案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
    猜你喜欢
    • 2022-11-08
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多