Konwertuj wynik zapytania Linq do słownika

Chcę dodać kilka wierszy do bazy danych za pomocą Linq do SQL, ale chcę zrobić "custom check" przed dodaniem wierszy, aby wiedzieć, czy muszę dodać, zastąpić lub zignorować wiersze incomming. Chciałbym, aby kontakt pomiędzy Klientem a serwerem DB był jak najniższy i zminimalizował liczbę zapytań.

Aby to zrobić, Chcę pobrać jak najmniej informacji wymaganych do walidacji i tylko raz na początku procesu.

Myślałem o zrobieniu czegoś w rodzaju to, ale najwyraźniej nie działa. Ktoś ma pomysł?

Dictionary<int, DateTime> existingItems = 
    (from ObjType ot in TableObj
        select (new KeyValuePair<int, DateTime>(ot.Key, ot.TimeStamp))
    )

To, co chciałbym mieć na końcu, to słownik, bez konieczności pobierania całych obiektów ObjectType z TableObject.

Rozważałem również następujący kod, ale starałem się znaleźć odpowiedni sposób:

List<int> keys = (from ObjType ot in TableObj orderby ot.Key select ot.Key).ToList<int>();
List<DateTime> values = (from ObjType ot in TableObj orderby ot.Key select ot.Value).ToList<int>();
Dictionary<int, DateTime> existingItems = new Dictionary<int, DateTime>(keys.Count);
for (int i = 0; i < keys.Count; i++)
{
    existingItems.Add(keys[i], values[i]);
}
Author: JoshL, 2009-06-05

4 answers

Spróbuj użyć metody ToDictionary w następujący sposób:

var dict = TableObj.Select( t => new { t.Key, t.TimeStamp } )
                   .ToDictionary( t => t.Key, t => t.TimeStamp );
 521
Author: tvanfosson,
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
2015-03-01 19:16:23

Patrząc na twój przykład, myślę, że tego właśnie chcesz:

var dict = TableObj.ToDictionary(t => t.Key, t=> t.TimeStamp);
 105
Author: BFree,
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
2009-06-05 02:53:48

Wypróbuj następujące

Dictionary<int, DateTime> existingItems = 
    (from ObjType ot in TableObj).ToDictionary(x => x.Key);

Lub pełnoprawna wersja typu

var existingItems = TableObj.ToDictionary(x => x.Key);
 7
Author: JaredPar,
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
2009-06-05 01:48:11

Użyj przestrzeni nazw

using System.Collections.Specialized;

Tworzy instancję DataContext klasy

LinqToSqlDataContext dc = new LinqToSqlDataContext();

Użyj

OrderedDictionary dict = dc.TableName.ToDictionary(d => d.key, d => d.value);

W celu pobrania wartości użyj przestrzeni nazw

   using System.Collections;

ICollection keyCollections = dict.Keys;
ICOllection valueCollections = dict.Values;

String[] myKeys = new String[dict.Count];
String[] myValues = new String[dict.Count];

keyCollections.CopyTo(myKeys,0);
valueCollections.CopyTo(myValues,0);

for(int i=0; i<dict.Count; i++)
{
Console.WriteLine("Key: " + myKeys[i] + "Value: " + myValues[i]);
}
Console.ReadKey();
 0
Author: Salman Mushtaq,
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
2017-10-16 12:59:37