2011-06-14 38 views
1

我想在.ToDictionary()將category_code和category_name連接到一個。現在我只發送category_name,但我想要category_name + category_code。可能嗎?用lambda表達式連接兩個值

public ActionResult Create() 
{ 
    Party party = new Party(); 
    var list = repository.GetCategories() 
     .Select(p => new { p.category_id, p.category_name, p.category_code }) 
     .AsEnumerable() 
     .ToDictionary(m => m.category_id, m => m.category_name); 

    party.categories = new SelectList(list, "Key", "Value", "SelectedValue"); 
    return View(party); 
} 
+0

我敢肯定的'.AsEnumerable()'可以被刪除。 – 2011-06-14 14:54:23

回答

2

你爲什麼要使用.ToDictionary()AsEnumerableSelect與匿名對象,而不是其他更短:

var list = repository 
    .GetCategories() 
    .Select(x => new SelectListItem 
    { 
     Value = x.category_id.ToString(), 
     Text = x.category_name + x.category_code 
    }); 
party.categories = new SelectList(list, "Value", "Text", "SelectedValue"); 

且不說這種東西更好地適應您的映射層。例如,如果你使用的是AutoMapper控制器的動作看起來是這樣的:

public ActionResult Create() 
{ 
    var categories = repository.GetCategories(); 
    var categoriesViewModel = Mapper.Map<IEnumerable<Category>, IEnumerable<CategoryViewModel>>(categories); 
    var party = new PartyViewModel 
    { 
     Categories = categoriesViewModel 
    } 
    return View(party); 
} 
+0

因爲我想給你一個更好的代表? =) – Niklas 2011-06-14 14:59:36

+0

如果'repository.GetCategories()'返回一個IQueryable,那麼在性能方面使用.Select()比使用AutoMapper更好。 – 2011-06-14 15:05:51

+0

另外如果'repository.GetCategories()'從ORM返回一個IQueryable,'x.category_id.ToString()'工作嗎? – 2011-06-14 15:06:55

0
.ToDictionary(m => m.category_id, m => string.format("{0}{1}",m.category_name ,m.category_code)); 
+0

我不會打擾使用string.Format的東西這麼簡單。 – 2011-06-14 14:56:12

+0

@Simon它更容易閱讀我猜,它絕對不會傷害。 – 2011-06-14 14:58:19

+0

這並不是比較容易閱讀,並且比連接兩個字符串要慢。我對string.Format沒有任何反應,但這裏沒有必要。 – 2011-06-14 14:59:51