使用LINQ to SQL的奇怪的排序规则问题

时间:2011-04-07 05:50:07

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

我在LINQ-SQL中遇到了最奇怪的排序规则错误。我有这个查询,在2个参数上执行左外连接。从查询中,我想为左连接表提取一个列,如果它不是null,否则从第一个表中提取。相关字段是 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的隐式转换,因为由于排序规则冲突导致值的排序规则未解析。

2 个答案:

答案 0 :(得分:1)

请你用sp_help查看你的表,看看列中是否有不同的排序规则。

关于该问题here

还有一个非常直接的解释

答案 1 :(得分:0)

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

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, .. });
相关问题