Преобразование 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
Ответ #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
- @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);
- -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);
- Причина, по которой вам нужен 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 при объявлении и использовании.
- Потому что ToDictionary находится в памяти. Отсутствие анонимного объекта означает, что из базы данных извлекаются все столбцы, а не только те, которые вам ...
-
10
-
5
-
3
-
4
-
16
-
5
-
6
-
4
-
5
-
5
-
3
-
12
-
5
-
2
-
5
-
11
-
4
-
4
-
16
-
7
-
4
-
2
-
2
-
6
-
3
-
6
-
4
-
5
-
4
-
4
-
7
-
5
-
14
-
4
-
5
-
4
-
1
-
4
-
5
-
5
-
2
-
3
-
2
-
3
-
8
-
3
-
3
-
2
-
7
-
2