2009-10-16 3 views
0

j'ai un Dictionary<int, int> idsAndTypes = new Dictionary<int, int>(); et j'ai unUtiliser une requête LINQ sur le dictionnaire et la liste

List<Product> products = new List<Product>() 

liste des produits, la catégorie de produits est comme ci-dessous

class Product 
{ 
public int Id {get;set;} 
public int Type{get;set;} 

} 

le idsAndTypes dictionnaire contient de types et id , maintenant je veux utiliser une requête linq sur la liste pour mettre à jour le type de produits basés sur les id dans le dictionnaire .... je sais que l'autre façon peut être comme suit:

foreach (int item in idsAndTypes.Keys) 
{ 
    Product.Where(product => product.Id == item). 
     Select(product => product).ToList()[0]. 
     Type = idsAndTypes[item]; 
} 

mais je veux le faire avec une requête LINQ pour éviter la boucle foreach, est-il un moyen de le faire? S'il vous plaît suggérer ...

Répondre

3

Eh bien, LINQ est vraiment pas l'interrogation mise à jour.

Il peut y avoir un moyen de le faire sans la boucle, mais je pense que la boucle est la manière la plus propre. Cependant, je n'utiliserais pas cette boucle. Vous avez quelque chose qui est très rapide à regarder, et vous êtes juste itérer ... mais ensuite faire une recherche (efficace) sur une structure de données lente en termes de recherche. Je ferais ceci:

foreach (Product p in products) 
{ 
    int type; 
    if (idsAndTypes.TryGetValue(product.Id, out type)) 
    { 
     p.LinkedProductType = type; 
    } 
} 

Une différence ici - qui mettra à jour tous les les produits dans la liste des valeurs dans le dictionnaire; Votre code actuel ne fera que le premier produit dans la liste avec l'ID donné. J'espère que ce n'est pas un problème.

+0

merci beaucoup monsieur pour répondre ... –

2

Votre exemple de code est assez déroutant. Mais je pense que ce que vous voulez est:

products = products.Select(p => 
    { 
    p.LinkedProductType = idAndTypes[p.ID]; 
    return p; 
    } 
); 

Bien que cela devrait atteindre l'objectif, je serais jugé un abus de LINQ.

Questions connexes