【问题标题】:Strange collation issue using LINQ to SQL使用 LINQ to SQL 的奇怪排序问题
【发布时间】:2011-07-31 09:37:38
【问题描述】:

我在 LINQ-SQL 中遇到了最奇怪的排序规则错误。我有这个查询,它对 2 个参数执行左外连接。从查询中,如果它不为空,我想为左连接表提取一列,否则从第一个表中提取。有问题的字段是 char,并且两个表具有相同的排序规则。 LINQ 代码如下所示,我已将导致错误的行加粗。

from contentList in dc.ContentList  
   join portalPriceClass in dc.PortalContentPriceClass  
   on contentList.ContentID equals portalPriceClass.ContentID  
   into ppc 
from portalSpecificPriceClass in ppc.Where(portalPriceClass => 
   portalPriceClass.PortalID==portalId).DefaultIfEmpty()  
where contentListPriority.PortalID == portalId  
select new  
{  
   ID = content.ID,  
   PriceClass = (portalSpecificPriceClass == null) ? contentGame.PriceClass : portalSpecificPriceClass.PriceClass 
}; 

很遗憾,我收到以下错误,但找不到任何原因:

System.Data.SqlClient.SqlException:无法执行 char 值到 char 的隐式转换,因为值的排序规则由于排序规则冲突而未解决。

【问题讨论】:

    标签: c# .net linq linq-to-sql collation


    【解决方案1】:

    能否请您使用 sp_help 检查您的表格以查看列中是否存在不同的排序规则。

    关于这个问题也有非常透彻的解释here

    【讨论】:

      【解决方案2】:

      您可以使查询更容易一些,并避免该问题,我认为这应该“有效”:

      from a in dc.ContentList
      where a.ContentID != null
      select new { ID = a.ContentID, a.PriceClass, .. }).Union(
          from b in dc.ContentList
          where dc.ContentList.FirstOrDefault(a => a.ContentID == b.ContentID) == null)
          select new { ID = b.ContentID, b.PriceClass, .. });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多