hal.dll ist beschädigt oder nicht vorhanden

So begrüßte mich mein Windows XP Rechner heute morgen. Der weiß wohl, dass sein Nachfolger mit Windows 7 neben ihm steht.
Wer nun versucht die C:\Windows\system32\hal.dll durch eine Kopie von der Windows CD zu ersetzen, wird wenig Erfolg haben.
Vermutlich ist die Boot-CFG von Windows defekt.
Daher in die Rettungskonsole mit der XP-CD booten und mit einem
boofcfg /rebuild
alles wieder herstellen 🙂

Linq Probleme mit ToString()

Ich finde Linq ja eine echt tolle Sache. Damit kann man schöne lesbare Statements formulieren, welche eigentlich sehr logisch sind.

Heute wollte ich anhand einer Datenbank eine <select>-Liste in einem ASP.NET MVC Projekt erstellen.
Dazu wollte ich die Html.DropDownList() verwenden, welche eine Liste des Typen „SelectListItem“ verlangt. Dies wollte ich schnell mit Linq erstellen:

var daten = from datensatz in this.datenSet select new SelectListItem { 
Value = datensatz.Id.ToString(),
Text = datensatz.Name
}

Das hat so nicht geklappt, Fehlermeldung lautete:

‚LINQ to Entities‘ erkennt die Methode ‚System.String ToString()‘ nicht, und diese Methode kann nicht in einen Speicherausdruck übersetzt werden.

Zudem wurde mir als fehlerauslösende Zeile die Html.DropDownList() angezeigt. Das Problem liegt an dem „datensatz.Id.ToString()“, obwohl es vom Visual Studio direkt vorgeschlagen wird. Auch andere casting Methoden ((string) vorschreiben, Convert.ToString()) waren nicht erfolgreich.
Per Google kam ich auf diesem Beitrag, welcher die Lösung enthielt. Ich schaufel die Daten vorher in ein Dictionary und gebe sie von dort aus, da das Dictionary die ToString() Methode kennt.

var foo = from datensatz in this.datenSet.ToDictionary(i => i.Id, i => i.Name)
          select new SelectListItem
                     {
                         Text = datensatz.Value,
                         Value = datensatz.Key.ToString()
                     };

Diese Lösung klappt hier nun ganz gut, da wir wirklich nur einen Key und ein Value haben. Spätestens bei drei Werten kann man nicht über ein Dictionary gehen. Da müssen die Daten dann vorher in eine „Dummy“-Klasse gepumpt werden, welche die Wertetypen so annimmt. Nicht die schönste Weg, aber ein besserer fällt mir spontan nicht ein.