2

有没有办法在 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 查询等效的代码。

4

1 回答 1

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();

或者,如果您愿意,当然可以将其分解为真正的方法而不是 a 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 回答