Почему ToDictionary <K, V> () генерирует ошибку компилятора при использовании с LINQ to SQL? - PullRequest
2 голосов
/ 10 марта 2009

Исходя из этого вопроса:

Linq-to-SQL ToDictionary ()

У меня есть таблица с именем Domains, в ней два столбца:

DomainID int
DomainName varchar(250)

Я хочу вернуть Dictionary<int, string>. Когда я пытаюсь выполнить любой из следующих кодов LINQ to SQL:

Dictionary<int, string> dict =
    dbc
    .Domains
    .Select(d => new {d.DomainID, d.DomainName})
    .AsEnumerable()
    .ToDictionary<int, string>(k => k.DomainID, k => k.DomainName);

или

Dictionary<int, string> dict = 
    (from d in dbc.Domains
      select new { d.DomainID, d.DomainName })
      .AsEnumerable()
      .ToDictionary<int, string>(k => k.DomainID, k => k.DomainName);

Я получаю следующую ошибку компиляции:

Instance argument: cannot convert from 'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<int>'

Сценарий здесь выглядит так же, как q245168 и должен работать, я что-то упускаю из виду?

Приветствия
Кев

1 Ответ

2 голосов
/ 10 марта 2009

Попробуйте удалить аргументы универсального типа; первый источник , а не ключ:

Dictionary<int, string> dict = 
(from d in dbc.Domains
  select new { d.DomainID, d.DomainName })
  .AsEnumerable()
  .ToDictionary(k => k.DomainID, k => k.DomainName); // <==== no angles

Здесь мы используем общий вывод типа для предоставления деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...