funktail1989
funktail1989

Reputation: 33

How to look at multiple conditions with a LINQ statement

I'm currently using a linq statement to move items from one list to another based of a condition, but i need to add a second condition and i think i'm having a syntax issue

What I'm currently doing:

var selected = Generatorlist.CallDataGeneratorsDone
  .Where(item => item.SkillNumber == SkillNumber)
  .ToList();

Generatorlist.CallDataGeneratorsDone = Generatorlist.CallDataGeneratorsDone
  .Except(selected)
  .ToList();

Generatorlist.CallDataGeneratorsNotDone.AddRange(selected);

What I'm trying to do:

var selected = Generatorlist.CallDataGeneratorsDone
  .Where((item => item.SkillNumber) & (item => item.CallServer))
  .ToList();

Generatorlist.CallDataGeneratorsDone = Generatorlist.CallDataGeneratorsDone
  .Except(selected)
  .ToList();

Generatorlist.CallDataGeneratorsNotDone.AddRange(selected);

I'm having an issue because you can't us & in a Lambda expression. I'm looking for some assistance in figuring out a way to accomplish this.

Upvotes: 1

Views: 67

Answers (4)

OlegI
OlegI

Reputation: 6010

The solution in your case would be:

    Generatorlist.CallDataGeneratorsNotDone
                 .AddRange(Generatorlist.CallDataGeneratorsDone
                      .Except(Generatorlist.CallDataGeneratorsDone
                          .Where(item => item.SkillNumber && item.CallServer))
                          .ToList())

Upvotes: 0

Rufus L
Rufus L

Reputation: 37020

You just need to remove the second declaration of item => (it only needs to be defined once):

var selected = Generatorlist.CallDataGeneratorsDone
    .Where(item => item.SkillNumber && item.CallServer)
    .ToList();

Upvotes: 1

user8767597
user8767597

Reputation:

If I don't miss something, it should be && instead of & in the same expression like this:

var selected = Generatorlist.CallDataGeneratorsDone
                .Where(item => item.SkillNumber && item.CallServer)
                .ToList();

This is assuming that both SkillNumber and item.CallServer are of Boolean. Otherwise you will need to write acomplete predicate like item.SkillNumber = 'blah blah'.

Upvotes: 0

Diado
Diado

Reputation: 2257

You can chain Where calls together like so...

var selected = Generatorlist.CallDataGeneratorsDone
                .Where(item => item.SkillNumber)
                .Where(item => item.CallServer)
                .ToList();

Upvotes: 0

Related Questions