所有相关代码要点: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/