【问题标题】:Convert lambda expression to linq query将 lambda 表达式转换为 linq 查询
【发布时间】:2012-11-07 21:59:29
【问题描述】:

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

【问题讨论】:

  • 阅读Out parameters and LINQ do not mix - 结尾是尽量避免查询中的副作用
  • 看起来你在这个函数中执行了两个函数我认为你最好使用你所拥有的方法

标签: c# linq lambda


【解决方案1】:

我同意你可能做对了 - 方法链语法非常有用,实际上是我编写 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)

【讨论】:

  • 感谢您的详细解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多