Linq pour mettre à jour une collection avec des valeurs d'une autre collection?
J'ai IQueryable<someClass>
baseList
et List<someOtherClass>
someData
Ce que je veux faire est de mettre à jour les attributs de certains éléments dans baseList.
Pour chaque élément de someData, je veux trouver l'élément correspondant dans baselist et de mettre à jour une propriété de l'élément.
someOtherClass.someCode == baseList.myCode
puis-je faire un peu de type de jointure avec Linq et définir baseList.someData += someOtherClass.DataIWantToConcantenate.
Je pourrais probablement le faire par itération, mais est-il une fantaisie Linq façon, je peux le faire en seulement quelques lignes de code?
Merci pour les conseils,
~ck à San Diego
source d'informationauteur Hcabnettek | 2009-07-21
Vous devez vous connecter pour publier un commentaire.
À la paire d'éléments dans les deux listes, vous pouvez utiliser LINQ rejoindre:
Cela vous donnera une énumération de chaque élément dans
someData
jumelé avec son homologuebaseList
. À partir de là, vous pouvez concaténer dans une boucle:Si vous avez vraiment le but de définir la concaténation plutôt que
+=
jetez un oeil à LINQ de l'Union, Intersect ou except méthodes.LINQ est pour interrogation - pas de mise à jour. Qui signifie qu'il sera bien d'utiliser LINQ pour trouver l'élément correspondant, mais pour la modification que vous devrait être l'aide d'itération.
Certes, vous souhaiterez peut-être effectuer certaines de requête appropriée pour obtenir
baseList
dans une forme efficace de la première par exemple unDictionary<string, SomeClass>
basé sur la propriété que vous allez utiliser pour trouver l'élément correspondant.Vous pouvez convertir le
IQueryable<SomeClass>
dans unList<SomeClass>
utilisez leForEach
méthode de la boucle et mettre à jour les éléments, puis de les convertir en arrière pourIQueryable
:Mais il peut être plus efficace au cours de cette aide non-LINQ constructions.
Comme mentionné avant, il doit être une combinaison de la boucle et LINQ
Vous ne pouvez pas simplement de trouver des objets qui sont dans une liste, mais pas les autres, parce qu'ils sont de deux types différents. Je vais supposer que vous êtes en comparant une propriété appelée OtherProperty qui est commune aux deux classes différentes, et les actions du même type. Dans ce cas, en utilisant rien mais des requêtes Linq: