2017-10-23 3 views
0

In meiner Aktion gebe ich eine IEnumerable<Dto> zurück, aber aufgrund einiger Änderungen in der Logik möchte ich eine IEnumerable<ViewModel> zurückgeben. Der Hauptunterschied zwischen Dto und ViewModel sind nur zwei Felder.Transform IEnumerable <Dto> zu IEnumerable

public IHttpActionResult GetRecursos(Guid LeccionId) 
{ 
    var result = _IProfesorRecurso.GetRecursoFromLeccion(LeccionId); 
    if (result == null) return BadRequest(); 
    return result; 
} 

Das Ergebnis ist die IEnumerable<Dto>:

public class Dto 
{ 
    public Guid Id { get; set; } 
    /* here are some properties */ 
} 

Die ViewModel sein würde: result

public class viewmodel 
{ 
    public Guid Id { get; set; } 
    /* here are some properties, the same as in Dto */ 
    public string ViewmodelProperty { get; set; } 
} 
+0

* "in meiner Aktion erstelle ich eine IEnumerable zurückkehre, aber aufgrund einiger Änderungen in die Logik, ich möchte ein IEnumerable zurückgeben "* - können Sie diesen Satz klären? –

+0

Welche Sammlung möchten Sie konvertieren? – Shyju

+0

Ich habe es korrigiert, aber es scheint, dass es einen Fehler gibt, der es mir nicht erlaubt, < > zu verwenden –

Antwort

1

Unter der Annahme, eine Sammlung Ihrer dto Klassen ist, können Sie eine LINQ-Abfrage verwenden, und Verwenden Sie die Methode Select, um eine neue Liste Ihrer Ansichtsmodellklasse

zu generieren Diese
var newList = result.Select(x=>new MyViewModel { Id =x.Id, 
               Name=x.Name, 
               ExtraProperty = "New property on vm"}); 

ist grundsätzlich gleich wie eine foreach-Schleife durch das Ergebnis Sammlung zu gehen und ein neues MyViewModel Objekt

var newList = new List<MyViewModel>(); 
foreach(var d in result) 
{ 
    var vm = new MyViewModel { Id=d.Id, Name =d.Name}; 
    vm.SomeOtherProperty = d.SomeOtherProperty; 
    vm.ExtraProperty = "New property on vm"; 
    newList.Add(vm); 
} 
Verwandte Themen