it-swarm.com.de

Konvertieren Sie das Linq-Abfrageergebnis in das Wörterbuch

Ich möchte einige Zeilen zu einer Datenbank mit Linq to SQL hinzufügen, aber ich möchte vor dem Hinzufügen der Zeilen eine "benutzerdefinierte Prüfung" vornehmen, um zu wissen, ob ich die eintreffenden Zeilen hinzufügen, ersetzen oder ignorieren muss Halten Sie den Datenverkehr zwischen Client und DB-Server so gering wie möglich und reduzieren Sie die Anzahl der Abfragen.

Dazu möchte ich so wenige Informationen abrufen, wie für die Validierung erforderlich sind, und zwar nur einmal am Anfang des Prozesses.

Ich dachte daran, so etwas zu tun, aber offensichtlich funktioniert es nicht. Hat jemand eine Idee?

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

Am Ende hätte ich gerne ein Dictionary, ohne die gesamten ObjectType-Objekte von TableObject herunterladen zu müssen.

Ich habe auch den folgenden Code in Betracht gezogen, aber ich habe versucht, einen geeigneten Weg zu finden:

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]);
}
293
Tipx

Versuchen Sie es mit der ToDictionary-Methode

var dict = TableObj.Select( t => new { t.Key, t.TimeStamp } )
                   .ToDictionary( t => t.Key, t => t.TimeStamp );
551
tvanfosson

Wenn Sie Ihr Beispiel betrachten, denke ich, dass Sie das wollen, was Sie wollen:

var dict = TableObj.ToDictionary(t => t.Key, t=> t.TimeStamp);
115
BFree

Versuche Folgendes

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

Oder die vollwertige Typ-abgeleitete Version 

var existingItems = TableObj.ToDictionary(x => x.Key);
7
JaredPar

Namespace verwenden

using System.Collections.Specialized;

Instanz von DataContext Class erstellen

LinqToSqlDataContext dc = new LinqToSqlDataContext();

Benutzen

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

Um die Werte abzurufen, verwenden Sie den Namespace

   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
Salman Mushtaq