Как преобразовать выражение linq в словарь<строка, строка>

Вы можете помочь мне, как преобразовать выражение linq в словарь? Следующий код выдает мне ArgumentException: элемент с таким же ключом уже был добавлен.

        IDictionary<string, string> listAllCoursesWithAreaAsDictionary = new Dictionary<string, string>();

        var dictionary =
            (from b in bookListRecord
             select new { b.CourseCode, b.Area }).Distinct();

        listAllCoursesWithAreaAsDictionary = dictionary.AsEnumerable().ToDictionary(x => x.CourseCode, x => x.Area); 

        return listAllCoursesWithAreaAsDictionary;

Когда я пытаюсь это:

        listAllCoursesWithAreaAsDictionary = dictionary.AsEnumerable().ToDictionary(x => x.CourseCode); 

Я получаю сообщение об ошибке: Невозможно неявно преобразовать тип "System.Collections.Generic.Dictionary" в "System.Collections.Generic.IDictionary". Существует явное преобразование (вам не хватает приведения?)

2 ответа

Решение

Договорились с Аароном, вы ищете оператора группировки:

  var dictionary = bookListRecord
    .GroupBy(g => g.CourseCode)
    .Select(g => new { g.Key, 
      AreaList = g.Select(c => c.Area).ToList(), 
      Area = g.Select(c => c.Area).FirstOrDefault() })
    .ToDictionary(g => g.Key);

Проблема в том, что

dictionary.AsEnumerable().ToDictionary(x => x.CourseCode); 

строка выполняет ваш запрос.

В вашей базе данных, откуда вы получаете данные, вы получаете то же самое CourseCode дважды, следовательно вы получите сообщение об ошибке:

"An item with the same key has already been added."

Ваш Distinct() не ведет себя так, как вы могли бы ожидать, вы должны это проверить. Вы хотели отличить по ключу, но вы звоните по разному по анонимному ключу / значению.

Другие вопросы по тегам