Преобразование Linq в SQL ToDictionary()

Как правильно преобразовать два столбца 9X_linq2sql из SQL (2008) с помощью Linq в словарь (для 9X_c# кеширования)?

В настоящее время я просматриваю 9X_c#.net IQueryable b / c. Я не могу заставить работать 9X_sql-to-linq метод ToDictionary. Любые идеи? Это работает:

var query = from p in db.Table select p; Dictionary dic = new Dictionary(); foreach (var p in query) { dic.Add(sub.Key, sub.Value); } 

Мне 9X_c# бы очень хотелось сделать что-то вроде этого, но, похоже, это 9X_c#-language не работает:

var dic = (from p in db.Table select new {p.Key, p.Value }) .ToDictionary(p => p.Key); 

Но я получаю такую ​​ошибку: Невозможно 9X_visual-c# преобразовать из System.Linq.IQueryable 9X_sql-to-linq в System.Collections.Generic.IEnumerable

85
0
4
Общее количество ответов: 4

Ответ #1

Ответ на вопрос: Преобразование Linq в SQL ToDictionary()

var dictionary = db .Table .Select(p => new { p.Key, p.Value }) .AsEnumerable() .ToDictionary(kvp => kvp.Key, kvp => kvp.Value) ; 
9X_linq-query-syntax
128
1

  • @AlexanderDerck - В то время AsEnumerable был необходим. Я не помню точно, почему после всего этого времени, но возможное объ ...

Ответ #2

Ответ на вопрос: Преобразование Linq в SQL ToDictionary()

Вы определяете только ключ, но вам также 9X_visual-c# необходимо включить значение:

var dic = (from p in db.Table select new {p.Key, p.Value }) .ToDictionary(p => p.Key, p=> p.Value); 

18
1

  • -1 Ошибка заключается в том, что часть `<string, string="">` заставляет его использовать `public static Dictionary <tkey, tsource=""> ToDictionary <tsource, tkey=""> (этот источник IEnumerable ...

Ответ #3

Ответ на вопрос: Преобразование Linq в SQL ToDictionary()

Спасибо, ребята, ваши ответы помогли мне 9X_c-sharp это исправить, должно быть:

var dic = db .Table .Select(p => new { p.Key, p.Value }) .AsEnumerable() .ToDictionary(k=> k.Key, v => v.Value); 

9
1

  • Причина, по которой вам нужен AsEnumerable(), заключается в том, что LINQ to SQL не смешивает локальную и удаленную (SQL) обработку, поэтому это приводит к тому, что первая часть выпол ...

Ответ #4

Ответ на вопрос: Преобразование Linq в SQL ToDictionary()

Зачем вам создавать анонимный объект для 9X_c-sharp каждого элемента в таблице только для его 9X_linq2sql преобразования?

Вы можете просто использовать 9X_c-sharp что-то вроде: IDictionary dic = db.Table.ToDictionary(row => row.Key, row => row.Value); Возможно, вам потребуется 9X_linq-query-syntax включить вызов AsEnumerable() между Table 9X_language-integrated-query и ToDictionary(). Я не знаю точного типа 9X_sql-to-linq db.Table.


Также исправьте первый пример, ваша 9X_language-integrated-query вторая переменная цикла не соответствует 9X_linq при объявлении и использовании.

2
2

  • Потому что ToDictionary находится в памяти. Отсутствие анонимного объекта означает, что из базы данных извлекаются все столбцы, а не только те, которые вам ...