it-swarm.com.de

Linq-to-SQL ToDictionary ()

Wie konvertiere ich zwei Spalten von SQL (2008) mithilfe von Linq ordnungsgemäß in ein Dictionary (für das Caching)?

Ich durchlaufe derzeit die IQueryable-Prozedur. Ich kann die ToDictionary-Methode nicht zum Laufen bringen. Irgendwelche Ideen? Das funktioniert:

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

Was ich wirklich gerne machen würde, ist so etwas, was anscheinend nicht funktioniert:

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

Aber ich bekomme diesen Fehler: Kann nicht von 'System.Linq.IQueryable' zu 'System.Collections.Generic.IEnumerable' konvertieren

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

Sie definieren nur den Schlüssel, aber Sie müssen den Wert auch einschließen:

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

Vielen Dank, Ihre Antworten haben mir geholfen, dieses Problem zu beheben. Sie sollten lauten:

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

Warum sollten Sie für jedes Element in der Tabelle ein anonymes Objekt erstellen, um es zu konvertieren?

Sie können einfach Folgendes verwenden: IDictionary<string, string> dic = db.Table.ToDictionary(row => row.Key, row => row.Value); Möglicherweise müssen Sie einen AsEnumerable () - Aufruf zwischen Table und ToDictionary () einfügen. Ich kenne den genauen Typ von db.Table nicht.


Korrigieren Sie auch das erste Beispiel. Ihre zweite Schleifenvariable stimmt bei Deklaration und Verwendung nicht überein.

1
TWiStErRob