377 votes

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

Je tiens à ajouter quelques lignes à une base de données en utilisant Linq to SQL, mais je veux faire un "custom vérifier" avant d'ajouter les lignes pour savoir si je dois ajouter, de remplacer ou d'ignorer l'incomming lignes. J'aimerais garder le trafic entre le client et le serveur de base de données aussi bas que possible et de minimiser le nombre de requêtes.

Pour ce faire, je veux extraire des informations aussi peu que nécessaire pour la validation, et une seule fois au début du processus.

Je pensais faire quelque chose comme ça, mais évidemment, ça ne fonctionne 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 l'ensemble de la ObjectType objets de TableObject.

J'ai aussi appris sur le code suivant, mais j'ai essayé de trouver une manière appropriée :

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

686voto

tvanfosson Points 268301

Étant donné que @Talljoe n’a pas ajouté sa réponse sur le fil de commentaire, je le mets ici afin que les gens voit bien le problème de quels @Tipx résolu. @Talljoe--un commentaire ici si vous ne validez pas votre réponse et je vais supprimer celui-ci.

123voto

BFree Points 46421

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

9voto

JaredPar Points 333733

Essayez ce qui suit

Ou la version inferenced de type entière

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X