Filtre IEnumerable
J'ai 3 classes avec les propriétés suivantes:
OfferList classe:
Guid Id
IEnumerable<Offer> Offers
Offre de classe:
Guid Id
Product Product
bool IsSealed
Classe de produit:
Guid Id
Un OfferList contient plusieurs Offres et une Offre exacte a 1 Produit.
Comment puis-je filtrer les OfferList pour contenir seulement les Offres qui ne sont pas scellées?
OfferList offerList = this.GetOfferList(id).Offers.Where(o => !o.IsSealed));
Il renvoie un IEnumerable de type Offre au lieu de filtrer les OfferList.
OriginalL'auteur niklr | 2012-12-04
Vous devez vous connecter pour publier un commentaire.
Intéressant - il est un peu confus ce que vous demandez ici.
Je pense vous vous demandez comment avoir
Offers
filtrée sur place. Si oui:IEnumerable<T>
est immuable (vous avez coulé un bétonList<T>
ou similaire pour obtenir de la mutabilité), etOffers
est unIEnumerable<T>
- de sorte que vous ne pouvez pas attendre deOffers.Where(o => !o.IsSealed));
à changement laOffers
propriété retourne une énumération que les filtres de la source que vous énumérez.À la place vous feriez
Noter, cependant, que cela masque l'origine
Offers
de référence pour tout autre partage de code queOfferList
instance. Il ne fait aucun filtrage jusqu'au début de l'énumération, soit. Mais ce n'est souvent préférable. Si vous voulez qu'il fait là et ensuite utiliser.ToArray()
ou.ToList()
à la fin de laWhere
à la force de l'énumération à faire.Une meilleure approche serait d'avoir une propriété ou une méthode sur la
OfferList
classe qui retourne une nouvelle énumérable sur demande:De cette façon, vous n'êtes pas détruire le maître énumérable.
Notez que ce code est sensible à la
Offers
nul (unNullReferenceException
) et que ce n'est pas grand pour retourner la valeur null enumerables (retour à vide à la place) - donc, si il ya une chance queOffers
peut être null alors empêcher ça; ou alors:OriginalL'auteur Andras Zoltan
Si vous voulez dire que vous souhaitez mettre à jour votre original
OfferList
exemple, vous pourriez vous suffit d'attribuer la séquence filtrée à sonOffers
champ:OriginalL'auteur Douglas
Vous devez définir la
Offers
de votreOfferList
classe. Vous ne pouvez pas directement jeté à laOfferList
car il n'est pas unList
ou n'est pas mise en œuvreIEnumerable
.OfferList list = new OfferList() { Offers = this.GetOfferList(id).Offers.Where(o => !o.IsSealed)) };
OriginalL'auteur LukeHennerley
Avez-vous besoin d'une nouvelle liste de non scellé offre?
OriginalL'auteur Rango