【问题标题】:Linq to entities contains is not working with pre-stored variablesLinq to entity contains 不适用于预存储的变量
【发布时间】:2014-12-23 20:50:47
【问题描述】:

所有相关代码的要点:https://gist.github.com/JamesGould123/2207bcec618cac8a3926

在 Linq to 实体中,contains 不适用于预存储的字符串。出于某种原因,

string queryStr = "AB7";
var viewModel6 = (from n in db.TableName
                  where n.TableCol.Contains(queryStr)
                  select n.TableCol);

返回查询字符串

{SELECT
`Extent1`.`TableCol`
FROM `TableName` AS `Extent1`
WHERE `Extent1`.`TableCol` LIKE '%p__linq__0%'}

它意外地将变量queryStr 替换为p__linq__0。 然而,

var viewModel5 = (from n in db.TableName
                  where n.TableCol.Contains("AB7")
                  select n.TableCol);

返回查询字符串

{SELECT
`Extent1`.`TableCol`
FROM `TableName` AS `Extent1`
WHERE `Extent1`.`TableCol` LIKE '%AB7%'}

正如预期的那样。

预存变量在我的办公室计算机上运行良好,但在我的家用计算机上却没有这样的运气。为什么这两段代码没有编译成同一个查询?如何让第一个与第二个编译相同?

更新:我去办公室并在包文件夹上运行 git add(我们有 .dlls gitignored)并备份数据库,回家,拉动,使用备份重新创建数据库,一切又恢复了。我认为这是其中一个 MySQL 软件包版本的问题。如果有人有真正的解决方案,我会留下这个问题。

【问题讨论】:

  • @GertArnold 将我的问题更新为更详细:为什么这两段代码没有编译为同一个查询?如何让第一个与第二个编译相同?

标签: c# mysql linq entity-framework


【解决方案1】:

这两个查询代码应该没有区别。 这是我从 LINQPAD 得到的:

string queryStr = "AB7";
var viewModel6 = (from n in this.TbClothes
                  where n.StyleNO.Contains(queryStr)
                  select n.StyleNO);

SQL:

-- Region Parameters
DECLARE @p0 NVarChar(4) = '%AB7%'
-- EndRegion
SELECT [t0].[StyleNO]
FROM [tbClothes] AS [t0]
WHERE [t0].[StyleNO] LIKE @p0

【讨论】:

  • 是的,它们肯定应该是相同的,但由于某种原因它们不是。我刚刚更新了我的问题。我解决了它,但我不确定确切的解决方案是什么。也许是数据库问题,也许是 MySQL 包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多