Преобразование 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 находится в памяти. Отсутствие анонимного объекта означает, что из базы данных извлекаются все столбцы, а не только те, которые вам ...