2

linqクエリでこのラムダ式を変換する方法はありますか?

function List<ViewModel> CreateViewModels(List<Model> models)
{
   return models.Select(x =>
   {
      var viewModel = new ViewModel();

      this.UpdateViewModel(x, viewModel);

      return viewModel;
   }).ToList();
}

ここで、「UpdateViewModel」は、ModelオブジェクトからViewModelオブジェクトに値を転送する関数です。

わかりました。このコードはクリーンですが、linqクエリに相当するものがあるかどうか疑問に思っています。

4

1 に答える 1

4

私はあなたがおそらくそれを正しく理解していることに同意します-メソッドチェーン構文は非常に便利であり、実際にはLINQを書くための私の好ましい方法です。

しかし、本当にLINQクエリ構文を使用したい場合は、次のようなことを行う必要があると思います。これは、基本的に、大きなラムダを別の何かに分割するだけです。

Func<Model, ViewModel> func = m =>
    {
        var viewModel = new ViewModel();
        this.UpdateViewModel(m, viewModel);
        return viewModel;
    };

return (from m in models
        select func(m)
       ).ToList();

またはもちろん、必要に応じて、代わりに実際のメソッドに分割することもできFuncます。

可能であれば、次のようなことをしたほうがよいかもしれません。

public class ViewModel
{
    public ViewModel(Model m)
    {
        // Do whatever it is you're currently doing in UpdateViewModel
    }
}

次に、次のことができます。

from m in models
select new ViewModel(m)
于 2012-11-07T22:13:14.343 に答える