web-dev-qa-db-ja.com

Lambda式の複数のWhere句

次のような単純なラムダ式があります。

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

ここで、式にもう1つのwhere句を追加する場合は、l.InternalName != String.Emptyそれでは、式はどうなりますか?

48
ashwnacharya

することができます

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

または

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

Where実装を見ると、Func(T, bool)を受け入れていることがわかります。つまり:

  • TはIEnumerable型です
  • boolは、ブール値を返す必要があることを意味します

だから、あなたがするとき

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

Whereに渡すラムダには、通常のC#コードを含めることができます。たとえば、&&演算子:

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

&&演算子を使用して同じwhereステートメントに含めることができます...

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

次のような比較演算子のいずれかを使用できます(ifステートメントを実行するように考えてください)。

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

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

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

... 3と10を戻します。

5
user110714

多分

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

おそらく同じwhere句に入れることもできます:

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)

または

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