所有相关代码的要点:https://gist.github.com/JamesGould123/2207bcec618cac8a3926
在Linq to entities中,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%'}
正如所料。
预存的变量在我的办公室计算机上工作正常,但在我的家用电脑上,没有这样的运气。为什么这两段代码没有编译到同一个查询?如何让第一个编译与第二个编译相同?
更新:我去办公室并在packages文件夹上运行git add(我们有.dll gitignored)并备份数据库,回家,拉,使用备份重新创建数据库,一切都恢复正常。我认为这是一个MySQL软件包版本的问题。如果有人有真正的解决方案,我会把问题留待。
答案 0 :(得分:0)
两个查询代码之间应该没有区别。 这是我从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