0
votes

Comment utiliser LINQ pour retourner un booléen

J'ai une boucle foreach où je suis itération à travers une liste pour vous assurer que chaque élément est valide et que vous souhaitez renvoyer un booléen.

Voici mon code foreach: P>

var isValid = requestList
    .Select(r =>
    {
        if (!r.ChannelId.HasValue || !r.PayoutAmountInCents.HasValue)
        {
            PayoutFDEvents.LogInvalidPayoutRequest(this.BuildPayoutFDDocument(r), "missing channelId or patronage amount");
            return false;
        }
        return true;
    });


3 commentaires

LINQ n'est pas approprié ici à cause du payoutfDevents.loginvalidpayouRequest appel. C'est un effet secondaire et ne faisant pas partie de la logique de projection. Stick avec l'original foreach boucle.


Je voudrais connecter tous les éléments non valides


L'une des réponses a-t-elle fonctionné pour vous?


3 Réponses :


2
votes

Ceci pourrait être converti en une expression simple comme celle-ci:

var isValid = requestList.All(r => r.ChannelId.HasValue && r.PayoutAmountInCents.HasValue)


2 commentaires

Pour mieux comprendre, quelle est la raison de ne pas se connecter à mon expression?


@RDOOLABH C'est la séparation des préoccupations. Vous pouvez détecter et enregistrer les entrées problématiques à l'aide d'une instruction séparée: demande de demande.Où (r => r.chancep == null || r.payoutamounttinct == null) .foreseach (r => payoutfdevents.loginvalidpayoutrequet (this. BuildPayoutFDDoc ument (R), «Quantité manquante canalid ou patronage»));



-1
votes

Une option serait d'utiliser: xxx

car false est "moins" que vrai , cela retournera false si l'une des entrées individuelles répond à la condition (c'est-à-dire null ).

défaillance Bit est à gérer Le scénario où demande est vide - dans quel cas isvalid sera défini sur true .

< EM> En toute honnêteté, car vous exécutez la journalisation dans votre boucle existante, je tiendrais votre code existant. C'est simple, clair et facile à lire et à comprendre.


0 commentaires

1
votes

Vous pouvez également essayer ceci:

var invalids = requestList.Where(r => !(r.ChannelId.HasValue && r.PayoutAmountInCents.HasValue)).ToList();
invalids.ForEach(r => PayoutFDEvents.LogInvalidPayoutRequest(BuildPayoutFDDocument(r), "msg"));
bool isValid = invalids.Any();


0 commentaires