【问题标题】:LIKE with Linq to EntitiesLIKE 与 Linq to Entity
【发布时间】:2011-04-28 05:55:50
【问题描述】:

我知道.Contains() 方法确实喜欢LIKE %therm%.StartsWith() 方法确实喜欢LIKE therm%.EndsWith() 方法喜欢LIKE %therm 但是...

有没有办法在**Linq to Entities** 上执行以下操作?

SELECT * FROM [dbo].[Users] WHERE Name LIKE 'rodrigo%otavio%diniz%waltenberg'

PS:我正在使用 LINQ TO Entity。不是 LINQ TO SQL

【问题讨论】:

标签: c# .net sql linq linq-to-entities


【解决方案1】:

这应该可以解决问题。

from u in context.users
    where System.Data.Linq.SqlClient.SqlMethods.Like(
        u.Name, 
        "rodrigo%otavio%diniz%waltenberg")
    select u

编辑:
事实证明,这只适用于 LINQ2SQL,不适用于 LINQ2Entities。 Linq SqlMethods.Like fails建议你可以直接在桌子上使用Where

【讨论】:

  • 异常:LINQ to Entities 无法识别方法 'Boolean Like(System.String, System.String)' 方法,并且此方法无法转换为存储表达式。
  • @Rodrigo:嗯,l2e 的工作接近于 l2s 令人困惑......我用 linq 更新了我的答案,以另一个可能有帮助的问题。
【解决方案2】:

是的,you can do this with ESQL/查询生成器语法:

var matching = Context.Users.Where("it.Name LIKE 'rodrigo%otavio%diniz%waltenberg'");

【讨论】:

    【解决方案3】:

    在您的 LINQ 语句中使用正则表达式怎么样?类似于以下内容:

            RegularExpressions.Regex p 
                 = new RegularExpressions.Regex("rodrigo%otavio%diniz%waltenberg");
    
            using (DataContext.MyDataContext context = new MyDataContext())
            {
                var result = from u in context.users
                          where p.IsMatch(u.name)
                          select u;
            }
    

    【讨论】:

    • 异常:LINQ to Entities 无法识别方法 'Boolean IsMatch(System.String)' 方法,并且此方法无法转换为存储表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2012-11-15
    相关资源
    最近更新 更多