2017-02-01 4 views
0

In meiner Aktion Methode, die ich leite die folgende Abfrage, die eine Liste zurückgibt:Wie konvertiert man anonyme Liste in der Liste von RoleViewModel?

var list = db.WorkRoles. 
       Join(db.WorkRolesUsersDetails, 
       o => o.WorkRoleId, od => od.WorkRoleId, 
       (o, od) => new 
       { 
        WorkRoleId = o.WorkRoleId, 
        RoleName = o.RoleName, 
        RoleDescription = o.RoleDescription, 
        CompanyId = o.CompanyId, 
        WRUDId = od.WRUDId, 
        UserDetailsId = od.UserDetailsId, 
        FocusStart = od.FocusStart, 
        FocusEnd = od.FocusEnd 
       }).ToList(); 

Ich habe ein viemodel im gleichen Format wie folgt aussehen:

public class RoleViewModel 
{ 
    public RoleViewModel(int workRoleId, string roleName, string roleDescription, int companyId, int wRUDId, string userDetailsId, DateTime focusStart, DateTime focusEnd) 
    { 
     WorkRoleId = workRoleId; 
     RoleName = roleName; 
     RoleDescription = roleDescription; 
     CompanyId = companyId; 
     WRUDId = wRUDId; 
     UserDetailsId = userDetailsId; 
     FocusStart = focusStart; 
     FocusEnd = focusEnd; 
    } 
    int WorkRoleId { get; set; } 
    string RoleName { get; set; } 
    string RoleDescription { get; set; } 
    int CompanyId { get; set; } 
    int WRUDId { get; set; } 
    string UserDetailsId { get; set; } 
    DateTime FocusStart { get; set; } 
    DateTime FocusEnd { get; set; } 
} 

Was ist der beste Weg ist, zu konvertieren das Ergebnis meiner Abfrage zu einer Liste meines Viewmodels?

+0

Gibt es einen Grund, warum Sie werden es sich um eine generische Liste an erster Stelle zu machen? Sie sollten in der Lage sein, direkt in ein neues Objekt '=> new RoleViewModel() {Eigenschaftszuweisung}' – JaredStroeb

+0

@JaredStroeb auszuwählen, wenn ich das versuche (in einer der Antworten hier vorgeschlagen) gibt es mir diese Ausnahme: Eine Ausnahme vom Typ ' System.NotSupportedException trat in EntityFramework.SqlServer.dll auf, wurde aber nicht im Benutzercode verarbeitet Weitere Informationen: In LINQ to Entities werden nur parameterlose Konstruktoren und Initialisierer unterstützt. –

+0

Ja, ich habe das parameterlose Konstruktorproblem kennengelernt, aber es sollte den generischen Konstruktor gefolgt von Eigenschaftszuweisungen akzeptieren. Gibt es eine innere Ausnahme oder mehr Informationen in der NotSupportedException? Ist die Antwort von @Michael auch eine Ausnahme? (Am Ende des Beispiels ist möglicherweise eine andere '.ToList()' erforderlich.) – JaredStroeb

Antwort

1

Wenn Sie nicht möchten, dass Ihre Aktionsmethode den View-Modell-Typ kennt, können Sie die folgenden Dinge ausprobieren.

  1. Verwenden Sie Select auf der ersten Liste und konstruieren Sie RoleViewModel für jedes Element.
  2. Verwenden Sie AutoMapper Bibliothek, die die Arbeit für Sie erledigen wird.

    var list = db.WorkRoles. Join(db.WorkRolesUsersDetails, o => o.WorkRoleId, od => od.WorkRoleId, (o, od) => new { WorkRoleId = o.WorkRoleId, RoleName = o.RoleName, RoleDescription = o.RoleDescription, CompanyId = o.CompanyId, WRUDId = od.WRUDId, UserDetailsId = od.UserDetailsId, FocusStart = od.FocusStart, FocusEnd = od.FocusEnd }).ToList() .Select(item => new RoleViewModel( item.WorkRoleId, item.RoleName, item.RoleDescription, item.CompanyId, item.WRUDId, item.UserDetailsId, item.FocusStart, item.FocusEnd));

1
var list = db.WorkRoles. 
      Join(db.WorkRolesUsersDetails, 
      o => o.WorkRoleId, od => od.WorkRoleId, 
      (o, od) => new RoleViewModel(
       o.WorkRoleId, 
       o.RoleName, 
       o.RoleDescription, 
       o.CompanyId, 
       od.WRUDId, 
       od.UserDetailsId, 
       od.FocusStart, 
       od.FocusEnd 
      )).ToList(); 
+1

Eine Ausnahme vom Typ 'System.NotSupportedException' ist in EntityFramework.SqlServer.dll aufgetreten, wurde aber nicht im Benutzercode verarbeitet Zusätzliche Informationen: Nur parameterlose Konstruktoren und Initialisierer werden in LINQ to Entities unterstützt. –

+0

Verwenden Sie 'Select' nach' ToList'. 'ToList' ruft die Objekte auf – Michael

Verwandte Themen