如何使用LINQ语句查看多个条件

时间:2017-10-18 14:09:49

标签: c# linq

我目前正在使用linq语句根据条件将项目从一个列表移动到另一个列表,但我需要添加第二个条件,我认为我有语法问题

我目前正在做的事情:

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

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

Generatorlist.CallDataGeneratorsNotDone.AddRange(selected);

我想做的事情:

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

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

Generatorlist.CallDataGeneratorsNotDone.AddRange(selected);

我遇到了问题,因为你不能和我们联系。在Lambda表达式中。我正在寻找一些帮助来找到实现这一目标的方法。

4 个答案:

答案 0 :(得分:1)

您只需要删除item =>的第二个声明(它只需要定义一次):

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

答案 1 :(得分:0)

您可以像这样链接Where调用...

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

答案 2 :(得分:0)

如果我没有遗漏某些内容,那么在同一个表达式中应该&&而不是&

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

这假设SkillNumberitem.CallServer都是布尔值。否则,您需要编写完整的谓词,如item.SkillNumber = 'blah blah'

答案 3 :(得分:0)

您案例中的解决方案是:

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