【发布时间】:2016-10-24 20:27:35
【问题描述】:
我有一段代码:
var component = (from components in dataContext.Component select components)
.Where(x => x.Name.ToString().Equals(componentCode));
其中Component 很简单object。
在mysql数据库表中(utf8编码-utf8_unicode_ci)
我有这样的记录:szkło 3mm(带有波兰字符ł)。
当我尝试使用上面的代码查找此记录时,我什么也得不到。
没有波兰语字符的记录可以正常工作。但是当我使用foreach 时,我得到了结果:
var component = (from components in dataContext.Component select components);
foreach(Component comp in component)
{
if (comp.Name.ToString().Equals(componentCode))
componentPrice = (decimal)comp.Price;
}
有没有办法只用一个 linq 代码而不用遍历表来获得结果?
【问题讨论】:
-
您使用
varchar而不是nvarchar作为Name列的任何原因? -
您的数据库中 Component.Name 的数据类型是什么。是 nvarchar 吗?
-
名称类型为 varchar。不,没有理由使用 varchar。
-
有趣的是,您遇到了与大多数人相反的问题。 linq 查询正在执行 sql 比较(显然失败了),而 for 循环强制将查询执行到内存中,然后进行 .Net 比较。通常 sql 比较更宽容,因为它默认不区分大小写。
-
问题似乎出在编码上,我有点怀疑 EF 是否可以使用包含此类符号的参数计算查询。尝试将列的编码设置为 unicode(通过连接字符串、流式 API 或数据注释)。
标签: c# mysql entity-framework linq