【问题标题】:Difference in Where clause and foreach look up in C# entity frameworkC#实体框架中Where子句和foreach查找的区别
【发布时间】: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


【解决方案1】:

好的,我找到了解决方案 - 我在连接字符串中添加了“Charset=utf8”并且它可以工作。 在主题中找到解决方案: Entity Framework C# Insert Data russian encoding problems

【讨论】:

    猜你喜欢
    • 2012-01-04
    • 2015-07-16
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2010-10-06
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多