web-dev-qa-db-fra.com

ToDictionary Linq-to-SQL ()

Comment convertir correctement deux colonnes de SQL (2008) en utilisant Linq en un dictionnaire (pour la mise en cache)?

Je boucle actuellement à travers le b/c IQueryable Je ne peux pas faire fonctionner la méthode ToDictionary. Des idées? Cela marche:

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);
}

Ce que j'aimerais vraiment faire, c'est quelque chose comme ça, qui ne semble pas fonctionner:

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

Mais j'obtiens cette erreur: impossible de convertir de 'System.Linq.IQueryable' en 'System.Collections.Generic.IEnumerable'

77
Codewerks
var dictionary = db
    .Table
    .Select(p => new { p.Key, p.Value })
    .AsEnumerable()
    .ToDictionary(kvp => kvp.Key, kvp => kvp.Value)
;
116
yfeldblum

Vous définissez uniquement la clé, mais vous devez également inclure la valeur:

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

Merci les gars, vos réponses m'ont aidé à résoudre ce problème, devrait être:

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

Pourquoi voudriez-vous créer un objet anonyme pour chaque élément du tableau juste pour le convertir?

Vous pouvez simplement utiliser quelque chose comme: IDictionary<string, string> dic = db.Table.ToDictionary(row => row.Key, row => row.Value); Vous devrez peut-être inclure un appel AsEnumerable () entre Table et ToDictionary (). Je ne connais pas le type exact de db.Table.


Corrigez également le premier exemple, votre deuxième variable de boucle ne correspond pas à la déclaration et à l'utilisation.

1
TWiStErRob