将lambda表达式转换为linq查询

时间:2012-11-07 21:59:29

标签: c# linq lambda

有没有办法在linq查询中转换这个lambda表达式?

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查询相同的代码。

1 个答案:

答案 0 :(得分:4)

我同意你可能做得对 - 方法链语法非常有用,实际上我是编写LINQ的首选方法。

但是如果你真的想使用LINQ查询语法,我认为你必须做这样的事情,这基本上只是将大lambda分解成单独的东西:

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)