J'essaie d'obtenir des valeurs d'iEnumérables, j'ai besoin de modifier le retour par défaut de sélectionner et de rejeter les valeurs null.
Dans cette fonction, je travaille avec des objets xelement pour cela ".
J'ai besoin que cette fonction ait la meilleure performance possible, donc pour que j'utilise content: strong> SELECT (x => {} ..) code> dans mon code. P>
p> 0[{Last=...,Foo=...}]
1[{Last=...,Foo=...}]
2[{Last=...,Foo=...}]
3[{Last=...,Foo=...}]
4[{Last=...,Foo=...}]
5[{Last=...,Foo=...}]
3 Réponses :
Le problème fondamental est que vous utilisez Sélectionnez code> pour filtrer des éléments, lorsque
où code> doit être utilisé. Puisque vous ne savez pas quels éléments pourraient être
null code> avant la sélection code> appelle, il est préférable d'utiliser:
.Select(...)
.Where(x => x != null);
"Le problème fondamental est que vous utilisez SELECT pour filtrer des éléments, lorsque vous devez utiliser.", C'est correct .. j'ai révisé mon code et maintenant je fais: où (condition). Sélectionnez (...) mais je ne suis pas sûr si c'est la meilleure solution. "Condition" vraiment est: Last.anyTout et j'ai besoin d'utiliser "Dernier" Var dans les deux ,.Sélectionnez et. Où.
@pikamorfo non, ce n'est pas le meilleur moyen, du tout. Il y a une raison pour laquelle j'ai mis le lieu où après i> la sélection
En fait, vous n'avez pas besoin. Quoi qu'il en soit, il n'y aura qu'une seule traversée sur la collection.
pourquoi? P>
Parce que Linq expressions sont ne traverse pas la matrice même une fois! P> Chaque opérateur LINQ renvoie un 1) Un opérateur LINQ qui renvoie une collection spéciale ( 2) A 3) Un opérateur de comptage ou de somme est utilisé (un opérateur qui renvoie juste un résultat), par exemple, Pour comprendre comment cela fonctionne, voyons une mise en œuvre optionnelle possible de ienumerable
Liste
tolist () code>,
toarray () code>, etc. P>
foreach code> LOOP exécuté sur le résultat , alors chaque élément est récupéré lorsqu'il est demandé. p>
compteur () code> ,
moyenne () code>,
aggerate () code>, etc. p>
SELECT ( ) CODE>: P>
var x = db.ToList().Where(r => r.Id < 555);
// Versus
var x = db.Where(r => r.Id < 555).ToList();
Vous pouvez vous débarrasser de null code> du tout.
Basé sur votre échantillon, où condition code> nécessite "Dernier" élément, vous pouvez le simplifier à
var result = document.Elements()
.Select(versiones => versiones.Elements().Last())
.Where(last => last.condition)
.Select(last => new
{
Last = last,
Foo = bar(last)
})
.ToList();
Si vous retirez la ligne
renvoie null; code>, vous obtenez une erreur. Ainsi, seules les données qui sont dans si elles seront retournées. Les valeurs nulelles ne seront pas dans vous sont émises.