Linq to entities包含的不是预先存储的变量

时间:2014-12-23 20:50:47

标签: c# mysql linq entity-framework

所有相关代码的要点: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软件包版本的问题。如果有人有真正的解决方案,我会把问题留待。

1 个答案:

答案 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