LINQ-to-SQL()

Jak poprawnie przekonwertować dwie kolumny z SQL (2008) za pomocą Linq do słownika (do buforowania)?

Obecnie przeglądam IQueryable b / c nie mogę uruchomić metody ToDictionary. Jakieś pomysły? To działa:

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

To, co naprawdę chciałbym zrobić, to coś takiego, co nie wydaje się działać:

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

Ale dostaję ten błąd: Nie można konwertować z ' System.Linq./ Align = "left" / Kolekcje.Ogólne.IEnumerable "

Author: Stijn, 2008-10-29

4 answers

var dictionary = db
    .Table
    .Select(p => new { p.Key, p.Value })
    .AsEnumerable()
    .ToDictionary(kvp => kvp.Key, kvp => kvp.Value)
;
 112
Author: yfeldblum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-28 22:53:56

Definiujesz tylko klucz, ale musisz również podać wartość:

var dic = (from p in db.Table
             select new {p.Key, p.Value })
            .ToDictionary(p => p.Key, p=> p.Value);
 14
Author: CMS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-27 12:54:07

Thanks guys, your answers help me fix this, should be:

var dic = db
        .Table
        .Select(p => new { p.Key, p.Value })
        .AsEnumerable()
        .ToDictionary(k=> k.Key, v => v.Value);
 9
Author: Codewerks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-28 23:07:38

Dlaczego tworzysz anonimowy obiekt dla każdego elementu w tabeli tylko po to, aby go przekonwertować?

Można po prostu użyć czegoś takiego jak: IDictionary<string, string> dic = db.Table.ToDictionary(row => row.Key, row => row.Value); Może być konieczne włączenie wywołania AsEnumerable () pomiędzy Table i ToDictionary (). Nie znam dokładnego typu db.Stolik.


Popraw także pierwszą próbkę, druga zmienna pętli jest niedopasowana przy deklaracji i użyciu.

 1
Author: TWiStErRob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-18 19:46:53