3

这是我的查询ToList()给出了错误 “无法解析排序规则冲突”

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(); 

这给了我错误:

Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.

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

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

+0

您应该为您正在使用的数据库添加标签(SQL Server?或?)。这可能是数据库引擎引发的异常,而不是实体框架。 – Slauma 2013-02-20 21:26:59

+2

删除.ToList()工作的原因是因为Linq查询是懒惰评估的。这意味着查询在最后的时刻运行。删除.ToList()只意味着查询根本不被执行。 – 2013-02-20 21:31:45

+0

@SystemDown非常感谢您的帮助。 – 2013-02-21 03:49:41

回答

3

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

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

+0

作为解决方法,只需更改排序规则以使它们相等即可。 – abatishchev 2013-02-20 21:34:44

+0

@muhmud非常感谢我改变了我的数据库整理类型,以便它们匹配并且工作。 – 2013-02-21 03:48:14

+0

@abatishchev非常感谢,我也一样想知道我们如何通过实体框架来处理这个问题。而男人感谢编辑它我的意思是让它更有意义.. – 2013-02-21 03:49:07

相关问题