2017-10-18 43 views
1

我目前使用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 exp ression。我正在寻找一些方法来实现这一目标。

+0

什么的'谓词item.CallServer',它必须匹配什么? – Equalsk

回答

0

你可以链转移呼叫在一起,像这样......

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

如果我不想念的东西,它应该是在同一个表达这样&&而不是&

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

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

+0

所以这必须是布尔值?我的两个变量都是int ...有没有办法用int来做到这一点?我不能做a =“blah blah”,因为有多个这样的实例,它需要从每个实例中拉出技能编号和调用服务器......如果这是有道理的 – funktail1989

1

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

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

你的情况的解决办法是:

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