使用LINQ to SQL时会出现奇怪的排序问题
本文关键字:排序 问题 to LINQ SQL 使用 | 更新日期: 2023-09-27 17:48:57
我在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值的隐式转换,因为值的排序规则冲突导致无法解析。
你可以用sp_help检查你的表,看看列中是否有不同的排序吗?
关于那个问题这里也有很透彻的解释
您可以使查询更容易一点,并避免这个问题,我认为这应该"工作":
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, .. });