Je souhaite ajouter des lignes à une base de données en utilisant Linq to SQL, mais je souhaite effectuer une "vérification personnalisée" avant d'ajouter les lignes pour savoir si je dois ajouter, remplacer ou ignorer les lignes entrantes .. limitez le plus possible le trafic entre le client et le serveur de base de données et limitez le nombre de requêtes.
Pour ce faire, je souhaite extraire le moins d’informations nécessaires à la validation et une seule fois au début du processus.
Je pensais faire quelque chose comme ça, mais évidemment, ça ne marche pas. Quelqu'un a une idée?
Dictionary<int, DateTime> existingItems =
(from ObjType ot in TableObj
select (new KeyValuePair<int, DateTime>(ot.Key, ot.TimeStamp))
)
Ce que j'aimerais avoir à la fin serait un dictionnaire, sans avoir à télécharger tous les objets ObjectType à partir de TableObject.
J'ai aussi considéré le code suivant, mais j'essayais de trouver un moyen approprié:
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]);
}
Essayez d’utiliser la méthode ToDictionary
like so:
var dict = TableObj.Select( t => new { t.Key, t.TimeStamp } )
.ToDictionary( t => t.Key, t => t.TimeStamp );
En regardant votre exemple, je pense que c'est ce que vous voulez:
var dict = TableObj.ToDictionary(t => t.Key, t=> t.TimeStamp);
Essayez ce qui suit
Dictionary<int, DateTime> existingItems =
(from ObjType ot in TableObj).ToDictionary(x => x.Key);
Ou la version déduite de type à part entière
var existingItems = TableObj.ToDictionary(x => x.Key);
Utiliser un espace de noms
using System.Collections.Specialized;
Créer une instance de DataContext
Class
LinqToSqlDataContext dc = new LinqToSqlDataContext();
Utilisation
OrderedDictionary dict = dc.TableName.ToDictionary(d => d.key, d => d.value);
Afin de récupérer les valeurs, utilisez 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();