2011-04-07 49 views
4

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

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

哪个版本的.NET? – tomsv 2011-04-07 07:18:40

回答

1

请问您可以使用sp_help检查您的表,看看列中是否有不同的排序规则。

还有一个极通解释关于这个问题here

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, .. });