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]);
}
Versuchen Sie es mit der ToDictionary
-Methode
var dict = TableObj.Select( t => new { t.Key, t.TimeStamp } )
.ToDictionary( t => t.Key, t => t.TimeStamp );
Wenn Sie Ihr Beispiel betrachten, denke ich, dass Sie das wollen, was Sie wollen:
var dict = TableObj.ToDictionary(t => t.Key, t=> t.TimeStamp);
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);
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();