2011-05-11 34 views
0

我想爲位於lambda表達式之外的變量分配一個值。例如。將值分配給lambda表達式之外的變量

model.Categories = 
    productService.GetAllCategories().Select(
     c => new CategoryViewModel 
     { 
      CategoryId = c.CategoryId, 
      CategoryName = c.CategoryName, 
      IsSelected = c.CategoryId == cat 
      //how can i also assign the CategoryName to model.SelectedCategory? 
     }).ToList(); 

model還包含SelectedCategory一個屬性,我想如果c.CategoryId == catCategoryName分配給它。我該怎麼做呢?

回答

2

我只是不喜歡這樣算賬:

model.SelectedCategory = model.Categories.Single(c => c.IsSelected).CategoryName; 

理想的情況下,雖然,我只是有SelectedCategory是財產動態返回,與其小於設定值可能墜落的不同步:

public string SelectedCategory 
{ 
    get 
    { 
     Category selected = Categories.SingleOrDefault(c => c.IsSelected); 
     return (selected != null ? selected.CategoryName : String.Empty); 
    } 
} 
0

我不認爲它可以在該查詢中完成。恐怕它必須在一個單獨的查詢中;像這樣(model.Categories後分配)

var selectedCategory = model.Categories.SingleOrDefault(c => c.IsSelected); 
if(selectedCategory != null) 
{ 
    model.SelectedCategory = selectCategory.CategoryName; 
} 
+0

這將指定一個Category對象給SelectedCategory;所需的結果是將CategoryName分配給SelectedCategory。 – 2011-05-11 01:14:27

+0

@Metro啊!錯過了那部分。固定! – 2011-05-11 01:21:02

4

我不是瘋了關於這種編程風格,因爲它很快變得不可讀,但它可以在一些有用的情況:

model.Categories = 
    productService.GetAllCategories().Select(
     c => 
      { 
       if (c.CategoryId == cat) 
        model.SelectedCategory = c.CategoryName; 
       return new CategoryViewModel 
       { 
        CategoryId = c.CategoryId, 
        CategoryName = c.CategoryName, 
        IsSelected = c.CategoryId == cat 
       } 
      }).ToList(); 
+1

lambda可以被重構爲一個新的方法,如'.Select(c => GetViewModelForCategory(c))',它具有能夠單元測試轉換邏輯的好處。 +1 – 2011-05-11 05:54:09