Linq-Ergebnisse in Liste umwandeln

entity-framework linq linq-to-entities

Frage

Ich habe meine Entitäten erweitert, um spezifische Schnittstellen für ihren Typ zu implementieren. Ich versuche folgende Abfrage auszuführen:

 var results = from x in context.MyEntityTable
               where x.AProperty == AValue
               select x;

 return results.Count() > 0 ? results.Cast<IApplicationEntity>().ToList() : null;

Ich erhalte jedoch die folgende Fehlermeldung:

"LINQ to Entities unterstützt nur das Umwandeln von primitiven Typen von Entitätsdatenmodellen"

Grundsätzlich möchte ich immer die Ergebnisse vom rohen Entitätstyp in eine generische Liste der implementierten Schnittstelle konvertieren.

Ist das möglich?

Akzeptierte Antwort

Sie können die AsEnumerable auf dem Client durchführen, indem AsEnumerable Abfrage-Übersetzungs-Layer des Entitätsframeworks umgehen, indem AsEnumerable Erweiterungsmethode AsEnumerable aufrufen:

return results.Any()
       ? results.AsEnumerable().Cast<IApplicationEntity>().ToList() 
       : null;

Es ist jedoch besser, die Reihenfolge der Count ändern:

var list = results.AsEnumerable().Cast<IApplicationEntity>().ToList();
return list.Count == 0 ? null : list;

Beliebte Antwort

Wenn Sie Ihre Ergebnisse in einen komplexen Typ umwandeln möchten, müssen Sie den Code erzwingen, LINQ to Objects anstelle von LINQ to Entities zu verwenden.

Der Trick ist das Aufrufen der AsEnumerable Erweiterungsmethode vor dem Cast.

Versuche Folgendes:

var results = from x in context.MyEntityTable
              where x.AProperty == AValue
              select x;

return results.AsEnumerable().Cast<IApplicationEntity>().ToList();

Beachten Sie auch, dass es nicht ratsam ist, Count() in der Aufzählung zu überprüfen, da dies bedeutet, dass die Auflistung zweimal wiederholt wird.



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum