2015-07-01 2 views
1

Я получаю сообщение об ошибке:Аргумент Exception «Пункт с тем же ключом уже был добавлен»

System.ArgumentException was unhandled by user code HResult=-2147024809 Message=An item with the same key has already been added.

При попытке загрузить страницу в этом приложении. Visual Studio указывает на эту строку:

_db.GroupProgramPlans.Select(x => new {Code = x.GroupCode, Name = x.Group}).Distinct().ForEach(x=> groups.Add(x.Code,x.Name)); 

как линия, вызывающая ошибку. Таблица, в которой запрашивается код, не имеет PK. Я пробежал по таблице, ища повторяющиеся строки. В таблице всего около 30 строк, и, хотя они имеют общие значения столбцов, нет повторяющихся строк. Я попытался удалить .Distinct(). Не совсем уверен, что вызывает ошибку и как ее следует обрабатывать. Ниже приведен код.

public ActionResult Index() 
     { 
      var groups = new Dictionary<string,string>(); 
      _db.GroupProgramPlans.Select(x => new {Code = x.GroupCode, Name = x.Group}).Distinct().ForEach(x=> groups.Add(x.Code,x.Name)); 

      ViewBag.Groups = groups; 

      return View(_db.DocumentTemplates.Where(x => x.Active == true)); 
     } 
+0

'Distinct' относится к вашему анонимному объекту не в' GroupCode'. Для анонимных объектов: они равны, если ** все свойства ** имеют одинаковое значение. Используйте * GroupBy * для 'GroupCode'. – EZI

ответ

1

Я хотел бы написать что-то вроде этого

var groups = _db.GroupProgramPlans 
       .GroupBy(x=>x.GroupCode) 
       .Select(x=>x.FirstOrDefault()) 
       .ToDictionary(x=>x.GroupCode,x=>x.Group); 
Смежные вопросы