2017-10-23 17 views
0

私の対応ではIEnumerable<Dto>が返されていますが、ロジックの変更によってIEnumerable<ViewModel>が返されます。 DtoViewModelの主な違いは、2つのフィールドだけです。Transform IEnumerable <Dto> to IEnumerable <ViewModel>

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

結果はIEnumerable<Dto>です:

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

ViewModelはこのようになります:resultを想定し

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

を作成するforeachループを使用するのと同じですロジック、私はIEnumerableを返すしたい "* - あなたはその文を明確にすることはできますか? –

+0

どのコレクションを変換したいですか? – Shyju

+0

私はそれを修正しましたが、私には使用できないバグがあるようです。< > –

答えて

1

があなたのDTOクラスのコレクションである、あなたはLINQクエリを使用することができますし、 Selectメソッドを使用して、ビューモデルクラスの新しいリストを生成します

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

これは私がしかし原因でいくつかの変更に、IEnumerableをを返す午前私の行動に「*基本的に結果の収集を通過し、新しいMyViewModelオブジェクト

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); 
} 
関連する問題