2011-05-11 3 views
0

람다 식 외부에있는 변수에 값을 할당하려고합니다. 예를 들면.람다 식 외부 변수에 값 지정

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 또한 내가 c.CategoryId == cat 경우에 CategoryName을 할당 할 SelectedCategory의 속성이 포함되어 있습니다. 어떻게해야합니까?

답변

2

난 그냥 이후 같은 것을 할 것 (model.Categories 후이 할당됩니다) 신속 읽을수록

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

나는 그 쿼리에서 할 수 있다고 생각하지 않습니다. 그것은 두려운 것이고 그것은 별도의 질의에 있어야 할 것입니다;

하지만 이상적으로
model.SelectedCategory = model.Categories.Single(c => c.IsSelected).CategoryName; 

가, 난 그냥 SelectedCategory는 속성을 동적으로 반환 할 수있는 것이 아니라,이 같은

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

이렇게하면 SelectedCategory에 범주 개체가 할당됩니다. 원하는 결과는 CategoryName을 SelectedCategory에 지정하는 것입니다. –

+0

@ 메트로 아! 그 부분을 놓쳤다. 결정된! –

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

람다는'.Select (c => GetViewModelForCategory (c))'와 같은 새로운 메소드로 리팩토링 될 수 있습니다.이 메소드는 변환 로직을 단위 테스트 할 수있는 이점이 있습니다. +1 –