c# - Linq toEntity contains 不适用于预存储的变量

标签 c# mysql linq entity-framework

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

在 Linq toEntity 中,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 软件包之一的版本问题。我将保留这个问题,以防有人有真正的解决方案。

最佳答案

两个查询代码之间应该没有区别。 这是我从 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

关于c# - Linq toEntity contains 不适用于预存储的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27627804/

相关文章:

c# - 如何编写一个函数来调用另一个函数并捕获一些异常?

c# - 不知道为什么我的类无法连载

c# - 如果我有冗长的数据类型会有问题吗?

php - MySQL PHP Integer列未作为字符串返回

vb.net - linq 结合 2 个查询

c# - 每次我打开我的 VS 解决方案时,我都会得到 “Projects have recently been added to this solution. Do you want to get them from source control?”

php - while 循环中的 mysql_fetch_assoc 问题 - foreach 循环中的查询格式错误

mysql - 带索引的 order by limit 的缓慢 MySql 查询

c# - 在 EF 5.0 中链接 OR 条件

c# - Entity Framework -动态sql