Разделяемый ToDictionary()
Как правильно преобразовать два столбца из SQL (2008) с помощью Linq в словарь (для кэширования)?
Я в настоящее время цикл через IQueryable b/c я не могу получить ToDictionary метод для работы. Есть идеи? Это работает:
var query = from p in db.Table
select p;
Dictionary<string, string> dic = new Dictionary<string, string>();
foreach (var p in query)
{
dic.Add(sub.Key, sub.Value);
}
то, что я действительно хотел бы сделать, это что-то вроде этого, что, похоже, не работает:
var dic = (from p in db.Table
select new {p.Key, p.Value })
.ToDictionary<string, string>(p => p.Key);
но я получаю эту ошибку: Не удается конвертировать из 'системы.В LINQ.IQueryable 'to' System.Коллекции.Родовой.IEnumerable'
4 ответа:
var dictionary = db .Table .Select(p => new { p.Key, p.Value }) .AsEnumerable() .ToDictionary(kvp => kvp.Key, kvp => kvp.Value) ;
вы только определяете ключ, но вам нужно также включить значение:
var dic = (from p in db.Table select new {p.Key, p.Value }) .ToDictionary(p => p.Key, p=> p.Value);
Спасибо, ребята, ваши ответы помогли мне исправить это, нужно:
var dic = db .Table .Select(p => new { p.Key, p.Value }) .AsEnumerable() .ToDictionary(k=> k.Key, v => v.Value);
зачем создавать анонимный объект для каждого элемента в таблице только для его преобразования?
вы могли бы просто использовать что-то вроде:
IDictionary<string, string> dic = db.Table.ToDictionary(row => row.Key, row => row.Value);
Возможно, Вам потребуется включить вызов AsEnumerable() между Table и ToDictionary(). Я не знаю точного типа БД.Стол.
также исправьте первый пример, ваша вторая переменная цикла не соответствует при объявлении и использовании.