2011-04-07 78 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, .. });