子操作 - 添加多个元素

时间:2016-12-19 13:06:30

标签: c# asp.net-mvc

我有一个包含以下代码段的子操作:

public ActionResult MyAction()
{
    var models = GetModelsFromDb();
    var counts = new Dictionary<int, int>();

    foreach (var model in models)
        if (!counts.ContainsKey(model.Id))
            counts.Add(model.Id, 0);

    return View(count);
}

问题是...... Add有时会抛出An item with the same key has already been added.例外。 可能是并发问题?我不认为,因为代码是在子操作中,而字典是局部变量。

1 个答案:

答案 0 :(得分:2)

回答后,请在GetModelsFromDb()中更改您的实现,以仅检索不同的项目:

你可以用linq这样做:

myList.GroupBy(x => x.id)
      .Select(g => g.First());

之后,您可以快速计算您的数据:

var counts = models.Count();

修改1:

如果您因任何原因无法在方法中执行不同的操作:

var counts = models.Select(m => m.id).Distinct().Count()