web-dev-qa-db-fra.com

Plusieurs clauses Where dans les expressions Lambda

J'ai une simple expression lambda qui ressemble à ceci:

x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty)

Maintenant, si je veux ajouter une autre clause where à l'expression, disons, l.InternalName != String.Empty alors quelle serait l'expression?

48
ashwnacharya

Peut être

x => x.Lists.Include(l => l.Title)
     .Where(l => l.Title != String.Empty && l.InternalName != String.Empty)

ou

x => x.Lists.Include(l => l.Title)
     .Where(l => l.Title != String.Empty)
     .Where(l => l.InternalName != String.Empty)

Lorsque vous examinez l'implémentation de Where, vous pouvez voir qu'elle accepte un Func(T, bool); cela signifie:

  • T est votre type IEnumerable
  • bool signifie qu'il doit renvoyer une valeur booléenne

Alors, quand tu fais

.Where(l => l.InternalName != String.Empty)
//     ^                   ^---------- boolean part
//     |------------------------------ "T" part
105
Rubens Farias

Le lambda que vous passez à Where peut inclure n’importe quel code C # normal, par exemple le && opérateur:

.Where(l => l.Title != string.Empty && l.InternalName != string.Empty)
13
AakashM

Vous pouvez l'inclure dans la même déclaration where avec l'opérateur && ...

x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty 
    && l.InternalName != String.Empty)

Vous pouvez utiliser n’importe quel des opérateurs de comparaison (pensez-y comme faire une instruction if) tel que ...

List<Int32> nums = new List<int>();

nums.Add(3);
nums.Add(10);
nums.Add(5);

var results = nums.Where(x => x == 3 || x == 10);

... ramènerait 3 et 10.

5
user110714

Peut être

x=> x.Lists.Include(l => l.Title)
    .Where(l => l.Title != string.Empty)
    .Where(l => l.InternalName != string.Empty)

?

Vous pouvez probablement aussi le mettre dans la même clause où:

x=> x.Lists.Include(l => l.Title)
    .Where(l => l.Title != string.Empty && l.InternalName != string.Empty)
3
Joey
x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty).Where(l => l.Internal NAme != String.Empty)

ou

x=> x.Lists.Include(l => l.Title).Where(l=>l.Title != String.Empty && l.Internal NAme != String.Empty)
2
Winston Smith