web-dev-qa-db-fra.com

Convertir le résultat de la requête Linq en dictionnaire

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

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 );
551
tvanfosson

En regardant votre exemple, je pense que c'est ce que vous voulez:

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

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

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();
0
Salman Mushtaq