4 Stimmen

Seltsames Sortierproblem mit LINQ to SQL

Ich habe die seltsamsten Sortierfehler in LINQ-SQL. Ich habe diese Abfrage, die eine Left-Outer-Join auf 2 Parameter ausführt. Aus der Abfrage möchte ich eine Spalte für die linke verbundene Tabelle extrahieren, wenn sie NICHT null ist, und andernfalls aus der ersten Tabelle. Das betreffende Feld ist ein char und beide Tabellen haben die gleiche Sortierung. Der LINQ-Code wird unten angezeigt, und ich habe die Zeile, die den Fehler verursacht, fett gedruckt.

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 
}; 

Leider erhalte ich die folgende Fehlermeldung und kann keine Erklärung dafür finden:

System.Data.SqlClient.SqlException: Die implizite Konvertierung eines char-Wertes in char kann nicht durchgeführt werden, da die Sortierung des Wertes aufgrund eines Sortierkonflikts nicht aufgelöst ist.

1voto

Ernesto Punkte 1473

Könnten Sie bitte Ihre Tabelle mit sp_help überprüfen, um zu sehen, ob es eine andere Sortierung in den Spalten gibt.

Es gibt auch eine sehr ausführliche Erklärung zu diesem Thema aquí

0voto

ravndal Punkte 225

Sie könnten die Abfrage etwas einfacher gestalten und das Problem vermeiden, und ich denke, das sollte "funktionieren":

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X