【问题标题】:LINQ2SQL LIKE Command for Phrase用于短语的 LINQ2SQL LIKE 命令
【发布时间】:2010-09-20 02:10:26
【问题描述】:

我正在尝试检索包含“Britney Spears”的字符串列表,这就是我使用的

from p in Objects
where p.Title.Contains("Britney Spears")
select p

这很好用,但是如果我想选择标题为“Britney Jean Spears”、“Britney 'Sexy' Spears”,它不起作用,所以我的问题是如何在两者之间插入通配符 '%' Britney Spears 在进行 LINQ2SQL 搜索时?谢谢。

问候, 安迪。

【问题讨论】:

    标签: .net linq linq-to-sql


    【解决方案1】:

    您可以为此目的使用SqlMethods.Like 方法。

    from p in Objects
    where SqlMethods.Like(p.Title, "Britney% Spears")
    select p
    

    【讨论】:

    • 哦,这是一个更好的选择。
    • 谢谢大家,这很有用。
    【解决方案2】:

    只需使用StartsWith()EndsWith() 来模拟模式。 AFAIK,LINQ-to-SQL 不支持通配符。

    from p in Objects
    where p.Title.StartsWith("Britney") && c.Title.EndsWith("Spears")
    select p;
    

    否则,如果您有更复杂的模式,您可以直接执行查询。

    db.ExecuteQuery<MyObject>("SELECT * "
                            + "FROM Objects "
                            + "WHERE Title LIKE 'Britney%Spears'");
    

    【讨论】:

      【解决方案3】:

      完全按照您使用直接 SQL 的方式进行操作

      您可以在like 子句中提供特殊字符,例如“.”、“%”和“[]”

      如果这还不够好,那么您可以使用正则表达式,但要小心,因为正则表达式将在“客户端”端执行,即它将获取整个内容,然后尝试缩小内存中的结果。你可以通过做一些优化zerkms的方法

      from p in Objects
      where p.Title.Contains("Britney") && p.Title.Contains("Spears") && regex.Match(p.Title).Success
      select p
      

      我还没有测试过,但它应该在 SQL 服务器端运行前两个条件,然后使用正则表达式缩小范围。

      【讨论】:

      • 这不适用于 Linq2Sql;在应用正则表达式之前,您必须致电 AsEnumerable
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多