2016-07-28 26 views
1

serialisieren Ich habe ein Problem Only parameterless constructors and initializers are supported in LINQ to Entities., und bin mir nicht sicher, wie dies zu beheben, kann ich den Konstruktor potenziell entfernen und diese manuell initialisieren, da der Code bereits da ist dann fragte ich mich, wenn überhaupt könnte gemacht werden.Kann nicht series zu viewmodel Typ über Konstruktor

var entries = Db.Devices.Select(device => new DeviceDetailsModel(device)).ToList(); 
devices.AddRange(entries); 

und hier ist der Konstruktor der Klasse

public DeviceDetailsModel(Device device) 
    { 
     DeviceID = device.DeviceID; 
     IPAddress = device.IPAddress; 
     Alias = device.Alias; 
     DeviceName = device.DeviceName; 
    } 
+0

Mögliches Duplikat [Link nur parameterlos Konstrukteuren und initializers unterstützt wird in LINQ to Entities Nachricht] (http://stackoverflow.com/questions/17367649/only-parameterless -constructors-and-initializers-unterstützt-in-linq-to-entity) –

+1

Grundsätzlich wird das Auswählen als Teil einer Abfrage für Ihre Datenbank ausgeführt, und Linq hat keine Ahnung, wie Sie Ihren Konstruktor in (vermutlich) SQL zu übersetzen . Wenn Sie sich nicht um die Anzahl der Spalten kümmern, die von der Datenbank zurückgegeben werden, erstellen Sie zuerst Ihr Ergebnis und dann die Transformation. –

Antwort

2

Sie Linq nicht nur LINQ zu Objekten Entities verwenden. Das ist der Unterschied. Linq to Entients übersetzt Ihre Linq-Abfrage in eine SQL-Abfrage und hat keine Idee, wie Sie Ihren Konstruktor übersetzen. Verwenden Sie initializer statt - Linq to Entity kann damit umgehen:

var entries = Db.Devices.Select(x => new DeviceDetailsModel 
{ 
    DeviceID = x.DeviceID; 
    IPAddress = x.IPAddress; 
    Alias = x.Alias; 
    DeviceName = x.DeviceName; 
}).ToList();