2017-10-18 42 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())