有没有办法在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查询相同的代码。
答案 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)