【发布时间】:2015-02-04 22:25:59
【问题描述】:
设置信息:
- VS2013 / C#
- EF6
- MySQL 数据库
- .Net 连接器 6.9.5
我正在尝试创建一个使用部分名称作为搜索条件返回帐户记录集合的方法。如果我使用 IQueryable .Contains() 扩展方法对字符串值进行硬编码,它会返回数据。但是,当我尝试使用变量时,不会返回任何数据。
Public class Test() {
MyEntities db = new MyEntities();
//Works....but the search criteria is hard coded.
public IQueryable<Account> WorksButValueHardCoded() {
return (from a in db.Accounts
where a.accountname.Contains("Test")
select a);
}
//Does not return anything
public IQueryable<Account> DoesNotReturnAnyData() {
//Obviously I would use a parameter, but even this test fails
string searchText = "Test";
return (from a in db.Accounts
where a.accountname.Contains(searchText)
select a);
}
}
我可以在 LINQ 生成的 SQL 中看到使用 LIKE 运算符,但我不明白变量是如何注入的:
SELECT
`Extent1`.`accountid`,
`Extent1`.`accountname`
FROM `account` AS `Extent1`
WHERE `Extent1`.`accountname` LIKE '%p__linq__0%'
那么...为什么它适用于硬编码值而不是字符串变量?
【问题讨论】:
-
请包含您提交给 MySQL 的错误。我也有同样的问题
-
看到与 6.9.5 相同的问题,回滚到“Install-Package MySql.Data.Entities.EF6”,这是 6.8.3,正如 @Ablue 的评论所指出的(也:bugs.mysql.com/bug.php?id=75193和bugs.mysql.com/bug.php?id=74918 和bugs.mysql.com/bug.php?id=74943) 太糟糕了!
-
是的,6.9.3 工作正常。幸运的是 nuget 有那个包,oracle 对找到它帮助不大。修复这个错误当然没有紧迫感。
标签: c# mysql linq entity-framework contains