2012-11-07 64 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

相關問題