Laden...

LINQ-Fehlermeldung

Letzter Beitrag vor 5 Monaten 2 Posts 466 Views
LINQ-Fehlermeldung

Hallo,

ich habe ein Dictionary erstellt. Die Daten habe ich erstmal manuell als Vorgabe erstellt.

Wenn ich diese aber nach einem Wert sortieren möchte, über LINQ, erhalte ich eine Fehlermeldung:

Das Objekt des Typs "System.Linq.OrderedEnumerable`2[System.Collections.Generic.KeyValuePair`2[System.Int32,FIMAN.FIMANInternetAnbieter],System.Int32]" kann nicht in Typ "System.Collections.Generic.Dictionary`2[System.Int32,FIMAN.FIMANInternetAnbieter]" umgewandelt werden.

Verwendetes Datenbanksystem: LINQ

            Dictionary<int, FIMANInternetAnbieter> L_ListeInternetAnbieter_sortiert=null;
           try
           {
               L_ListeInternetAnbieter = FIMANInternetAnbieter.AnbieterlisteLaden(L_ListeInternetAnbieter);
               //L_ListeInternetAnbieter_sortiert = (Dictionary<int, FIMANInternetAnbieter>)(from Anbieter in L_ListeInternetAnbieter orderby Anbieter.Value.Reihenfolge ascending select Anbieter);
               var L_ListeInternetAnbieter_sortiert2 = from Anbieter in L_ListeInternetAnbieter orderby Anbieter.Value.Reihenfolge ascending select Anbieter;
               L_ListeInternetAnbieter_sortiert = (Dictionary<int, FIMANInternetAnbieter>)L_ListeInternetAnbieter_sortiert2;
           }
           catch (Exception ex)
           {
               FIMANLogging.WriteErrorLog("ERROR", "FIMANInternetAnbieter:AnbieterlisteSortiert", ex);
               throw;
           }
           return L_ListeInternetAnbieter_sortiert;

Es ist egal, ob ich den auskommentierten Code verwende oder den Umweg über "var". Die Fehlermeldung kommt immer.

Wie bekomme ich den Fehler weg, der nur zur Laufzeit auftritt?

Tschau

Wenn du sowas brauchst wie

(Dictionary<int, FIMANInternetAnbieter>)L_ListeInternetAnbieter_sortiert2;

ist das schon nen sehr deutliches Zeichen, dass Du hier mit falschen Annahmen arbeitest.

Wie bekomme ich den Fehler weg, der nur zur Laufzeit auftritt?

Die tritt nur auf, weil Du mit dem harten Cast sagst "Ey, ich hab mehr recht als Du Compiler". Und wenn das dann falsch is, dann knallts - wie hier.
Bei Linq gibts eigentlich keinen Fall, bei dem Du etwas hart casten musst.

Das hier

from Anbieter in L_ListeInternetAnbieter orderby Anbieter.Value.Reihenfolge ascending select Anbieter;

liefert Dir ein OrderedEnumerable<KeyValuePair<<int, FIMANInternetAnbieter, int>> aber Du versuchst es in ein Dictionary<int, FIMANInternetAnbieter> zu stopfen - geht nicht. So ähnlich als wenn Du versuchen würdest bei einem Formwürfel ein Quader in einen Stern drücken zu wollen.

In Deinem Fall ist var nicht mal nen anonymer Typ, sondern ein konkreter. Beachte doch den Typ und verwende ihn einfach richtig?
Willst Du ein Dictionary, dann musst Du über ToDictionary gehen und die Typen korrekt zuweisen.

Auch wegen dem anderen Thema: Schau Dir mal die Linq 101 Tutorials an, dann hast 90% Linq-Wissen.


 FIMANLogging.WriteErrorLog("ERROR", "FIMANInternetAnbieter:AnbieterlisteSortiert", ex);

Es gibt einen Standard (Technologieübergreifend), wie man loggen sollte. So eher nicht 😉

Logging in .NET
.NET Open Telemetry

.NET Basics: Exceptions