user1765862
user1765862

Reputation: 14205

Multiple where linq

I want to use multiple filter on my recordset, so I tried with following

var myData = ...
var fdata = myData
          .Where(x => x.Type == Domain.Model.MyType.A) 
          .Where(x => x.Type == Domain.Model.MyType.B)
          .Where(x => x.Type == Domain.Model.MyType.C)
.ToList();

I want to query data if fdata is any of this MyType (A, B or C).

Upvotes: 2

Views: 107

Answers (5)

Nacho
Nacho

Reputation: 962

If you don't like || you can use...

Domain.Model.MyType[] types = new Domain.Model.MyType[] {
    Domain.Model.MyType.A, Domain.Model.MyType.B, Domain.Model.MyType.C
};
var myData = ...
var fdata = myData.Join(types, x => x.Type, y => y, (x, y) => x);

or...

Domain.Model.MyType[] types = new Domain.Model.MyType[] {
    Domain.Model.MyType.A, Domain.Model.MyType.B, Domain.Model.MyType.C
};
var myData = ...
var fdata = myData.Where(x => types.Contains(x.Type));

...but || is good solution.

Upvotes: 0

israel altar
israel altar

Reputation: 1794

You can write the code like that:

var fdata = myData
      .Where(x => x.Type == Domain.Model.MyType.A ||
       x.Type == Domain.Model.MyType.B ||
       x.Type == Domain.Model.MyType.C)
      .ToList();

Upvotes: 3

Pawel Maga
Pawel Maga

Reputation: 5807

It's simple:

var myData = ...
var fdata = myData
          .Where(x => x.Type == Domain.Model.MyType.A ||
           x.Type == Domain.Model.MyType.B ||
           x.Type == Domain.Model.MyType.C)
.ToList();

Upvotes: 2

Marcin J
Marcin J

Reputation: 378

For example

   var fdata =  myData.Where(x => x.Type == Domain.Model.MyType.A ||  x.Type == Domain.Model.MyType.B ||  x.Type == Domain.Model.MyType.C ) 

Upvotes: 3

Enigmativity
Enigmativity

Reputation: 117175

var myData = ...
var fdata =
    myData
        .Where(x =>
            x.Type == Domain.Model.MyType.A
                || x.Type == Domain.Model.MyType.B
                || x.Type == Domain.Model.MyType.C)
        .ToList();

You are better off doing a .ToArray() at the end, unless you need a list, as it is more memory efficient.

Upvotes: 2

Related Questions