我在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的隐式转换,因为由于排序规则冲突导致值的排序规则未解析。
答案 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, .. });