6
votes

La séquence contient plus d'un élément de correspondance

Quand j'essaie de définir iSdefault Propriété de chaque pansement, où correspond à une condition, il jette une erreur disant:

séquence contient plus d'une séquence de correspondance. xxx


0 commentaires

6 Réponses :


1
votes

C'est un InvalidOperationException projeté par la méthode unique .

La méthode est censée ne renvoyer qu'un seul élément, veuillez vérifier les critères que vous utilisez sur votre requête.

Cependant, une exception est également lancée lorsqu'il ne trouve pas d'élément


0 commentaires

1
votes

Vous avez plus d'un élément de cet élément.

Si vous êtes sûr qu'il doit y avoir un (single), alors vous devez revoir comment cela est-ce.

S'il est attendu, il y en a plus d'un, vous devez utiliser des évaluations pour définir les valeurs.


0 commentaires

12
votes

Eh bien, cette exception dit qu'au moins deux éléments de la séquence drapkitems correspondent à votre condition. L'appel à unique provoque ensuite l'exception, car il affirme qu'un seul élément est transmis.

lire votre question me fait penser que vous voulez faire quelque chose sur chaque élément de la séquence d'entrée, alors Vous utiliserez probablement une boucle de forach: xxx


3 commentaires

puis-je le faire dans une seule instruction à tous les articles où correspond à une condition définie par défaut sur false


@Novicetodototnet qui n'est pas l'intention de Linq.


@Novicetodototnet blogs.msdn.com/ B / ERICLIPPERT / Archive / 2009/05/18 / ...



8
votes
this.DressingItems.Where(x=> x.DressingInfo.CatID == catId && 
                                x.ProductID == this.ProductID).ToList()
                 .ForEach(item=>item.IsDefault = false);

3 commentaires

Oui tu as raison. Il existe une méthode d'extension définie sur Liste mais à mon avis, cette déclaration est difficile à lire et a le classement d'une prise de vue en direct =)


pourquoi tu dis cela? Est-ce à cause du capital F dans foreach :)?


Non - peut-être le capital e :) Mon opinion personnelle: la relève LINQ fournit un moyen agréable d'interroger une source de données de manière compacte, mais la méthode foreach n'est pas Projection ou sélection sur la séquence. Au lieu de cela, il passe les éléments à son corps où quelque chose se passe et retourne le vide. Il brise le motif :)



2
votes

Le point de l'opérateur unique est d'affirmer qu'une séquence donnée n'a qu'un élément. Par exemple, lors de la récupération d'une instance spécifique par clé primaire.

Je suppose que vous souhaitez muter l'état de tout drapkitem correspondant aux critères, auquel cas avez-vous des options, tous impliquant l'énumération des ResultSet, et exécuter un comportement.

Il n'y a pas d'opérateur Linq pour le faire spécifiquement, car les opérateurs LINQ sont censés être purs. Les fonctions pures sont des fonctions qui n'ont pas d'effets secondaires, ce qui est exactement ce que vous essayez de faire.

Il y a cependant une extension de méthode sur list qui fait permettre cela. par exemple xxx

ou vous pouvez rouler votre propre: xxx

Vous pouvez demander pourquoi les gars de Microsoft ont décidé de l'ajouter à la BCL: comme je me souviens, l'idée était qu'une extensionMethod contre un foreach () {} construit ne donnerait pas beaucoup d'avantages en termes de typage de toute façon, et cela ne vous aiderait pas du tout dans termes d'ambiguïté. Tous les autres opérateurs sont libres d'effet secondaire et celui-ci est explicitement conçu pour les induire.


0 commentaires

1
votes

Puisque vous recherchez une doublure, vous pouvez créer votre propre méthode. XXX PRE>

puis l'appelez par P>

DoActionForEachElement(
               DressingItems,
               xx => xx.DressingInfo.CatID == catId && xx.ProductID == ProductID,
               x => x.IsDefault = false);


0 commentaires