【问题标题】:Like SQL Query in LINQ类似于 LINQ 中的 SQL 查询
【发布时间】:2010-10-08 22:01:50
【问题描述】:

我的问题如下:

我正在寻找一种将 LINQ 表达式转换为 SQL LIKE 查询的 LINQ 解决方案。

(我知道在 LINQ 中我可以使用 Contains、StarsWidth、EndWidth 来代替“LIKE”,但在我的情况下这不是一个好的解决方案,如果您检查生成的 sql 脚本,您会发现它没有使用 LIKE)

我发现很多文章使用 System.Data.Linq.SqlClient.SqlMethods.Like 方法 所以我写了我的查询:

var query = from c in _context.prgCity where SqlMethods.Like( c.FullName, "%buda") select c.FullName + "|" + c.prgCountry.CountryName;

return query.ToList<string>();

但是当查询运行时,我收到以下错误消息:

“LINQ to Entities 无法识别方法 'Boolean Like(System.String, System.String)' 方法,并且该方法无法转换为存储表达式。”

任何人都可以帮助我做错了什么?

【问题讨论】:

    标签: c# sql linq


    【解决方案1】:

    您尝试在从 LINQ 到实体时使用 SqlMethods.Like。根据the documentation

    此方法目前仅在 LINQ to SQL 查询中受支持。

    您还没有真正解释为什么 Contains/StartsWith/EndsWith 对您不起作用(根据我的经验,它们确实被翻译成 LIKE 子句)。

    【讨论】:

    • 我试着解释一下为什么 Startwidth 方法不适合我。
    • @user295541:我觉得你的解释没有说服力。 StartsWith 涵盖“term%”,EndsWith 涵盖“%term”,Contains 涵盖“%term%”。唯一需要“喜欢”的时候是“te%rm”。实际上,“te%rm”可以通过使用StartsWithEndsWith 来完成。像“t%e%r%m”这样的东西不能。
    【解决方案2】:

    您可以将查询编写为:

    var query = from c in _context.prgCity 
                where c.FullName.EndsWith("buda")
                select c.FullName + "|" + c.prgCountry.CountryName;
    

    【讨论】:

      【解决方案3】:
      where c.FullName.Contains("buda")
      

      【讨论】:

        【解决方案4】:

        使用 Contains 而不是 SQLMethods.Like。它会起作用的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多