2012-11-07 55 views
2

有没有什么办法在linq查询中转换这个lambda表达式?将lambda表达式转换为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查询。

+2

有[读出的参数和LINQ不要混用](http://blogs.msdn.com/b/ericlippert/archive/2012/08/14/out-parameters-and-linq-do-not-mix.aspx) - 结束行是**尝试始终避免查询中的副作用** – DaveShaw

+0

看起来像你在这个功能中执行两个功能我认为你最好跟随你的意见 –

回答

3

我同意你可能已经说得对 - 方法链接的语法非常有用,而且实际上是我编写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) 
+0

谢谢你的详细信息解释。 – Samuel

相关问题