Quand j'essaie de définir séquence contient plus d'une séquence de correspondance. P>
blockQuote> iSdefault code> Propriété de chaque pansement, où correspond à une condition, il jette une erreur disant:
6 Réponses :
C'est un 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. P>
Cependant, une exception est également lancée lorsqu'il ne trouve pas d'élément p> InvalidOperationException Code> projeté par la méthode code> unique code>. p>
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. P>
S'il est attendu, il y en a plus d'un, vous devez utiliser des évaluations pour définir les valeurs. P>
Eh bien, cette exception dit qu'au moins deux éléments de la séquence 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: p> drapkitems code> correspondent à votre
où code> condition. L'appel à
unique code> provoque ensuite l'exception, car il affirme qu'un seul élément est transmis.
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 / ...
this.DressingItems.Where(x=> x.DressingInfo.CatID == catId && x.ProductID == this.ProductID).ToList() .ForEach(item=>item.IsDefault = false);
Oui tu as raison. Il existe une méthode d'extension définie sur Liste code> 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 code> dans
foreach code> :)?
Non - peut-être le capital e code> :) 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 code> 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 :)
Le point de l'opérateur code> unique code> 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 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. P> Il y a cependant une extension de méthode sur ou vous pouvez rouler votre propre: p> 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 drapkitem code> correspondant aux critères, auquel cas avez-vous des options, tous impliquant l'énumération des ResultSet, et exécuter un comportement. p>
list
foreach () {} code> 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. P> p>
Puisque vous recherchez une doublure, vous pouvez créer votre propre méthode. puis l'appelez par P> DoActionForEachElement(
DressingItems,
xx => xx.DressingInfo.CatID == catId && xx.ProductID == ProductID,
x => x.IsDefault = false);