Странная проблема сопоставления при использовании LINQ to SQL - PullRequest
4 голосов
/ 07 апреля 2011

У меня самая странная ошибка сопоставления в 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 не может быть выполнено, так как сопоставление значения не разрешено из-за конфликта сопоставления.

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Не могли бы вы проверить свою таблицу с помощью sp_help, чтобы увидеть, есть ли другая сортировка в столбцах.

Существует также очень подробное объяснение по этому вопросу здесь

0 голосов
/ 07 апреля 2011

Вы могли бы сделать запрос немного проще и избежать проблемы, и я думаю, что это должно "сработать":

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