【问题标题】:ToList() gives error "Cannot resolve collation conflict"ToList() 给出错误“无法解决排序规则冲突”
【发布时间】:2013-02-06 00:02:36
【问题描述】:

这是我的查询

var maillst = (from o in ObjContext.CashDepositCapturings
               join m in ObjContext.Merchants on o.MerchantID equals m.MerchantID
               join u in ObjContext.Users on o.CreatedBy equals u.UserID
               where u.EmailAddress != String.Empty && u.EmailAddress != null && 
               o.CashDepositCapturingID.Equals(dataModel.CashDepositId)
               select new CashDepositApproveMail
               {
                  SendToEmailId = u.EmailAddress,
                  SendToFirstName = u.FirstName,
                  sendToLastName = u.LastName,
                  cashDepoCreatedBy = o.CreatedBy,
                  CashDepoCaptrId = o.CashDepositCapturingID
               }).ToList();

这给了我错误:

无法解决等于操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”之间的排序规则冲突。

但是当我删除 .ToList() 它工作正常

我有三个这样的查询我想将所有三个的结果添加到一个列表中并将其发送到某个函数。

【问题讨论】:

  • 你应该为你正在使用的数据库添加一个标签(SQL Server?或者?)。这可能是数据库引擎引发的异常,而不是实体框架。
  • 删除 .ToList() 的原因是因为 Linq 查询是惰性求值的。这意味着查询在最后一刻运行。删除 .ToList() 只是意味着根本不执行查询。
  • @SystemDown 非常感谢您的帮助。
  • @Slauma 感谢您的指出。现在我明白了当时我不知道原因....

标签: c# sql-server entity-framework exception-handling collation


【解决方案1】:

当它到达数据库时,您最终会尝试比较使用不同排序规则存储的两个 varchar。一种是使用 Latin1 General Case Insensitive Accent Sensitive 的 SQL 排序规则,另一种是该排序规则的 Windows 风格。

在 SQL 中,您可以通过对相关列使用 collate 来解决此问题,以确保它们在相同的排序规则中进行比较。在您的实体框架中,您必须找到其他方法来使排序规则相同。

【讨论】:

  • 作为解决方法,只需更改排序规则以使它们相等。
  • @muhmud 非常感谢我更改了我的数据库排序规则类型,以便它们匹配并且有效。
  • @abatishchev 非常感谢,我同样想知道如何通过实体框架来处理这个问题。谢谢你编辑它,我的意思是让它更有意义..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 2016-01-04
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多