使用lambda表达式连接两个值

时间:2011-06-14 14:50:00

标签: asp.net-mvc

我想在.ToDictionary()中将category_code和category_name连接到一个 Value 。现在我只发送category_name,但我想要category_name + category_code。可能吗?

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);
}

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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