2010-07-23 64 views
1

我有「Contains」方法,但我需要一個「Not Contains」方法。有什麼建議麼?我如何獲得不包含列表中的數據?

var ResultsOfMPD = (from m in engMpdMultiSelect 
        where engMpdMultiItems.Select(o => o.ENG_MPD_MYTECHNIC_TASK_NO). 
        Contains(m.ENG_MPD_MYTECHNIC_TASK_NO) 
        select m); 

有沒有這樣的方法?

var ResultsOfMPD = (from m in engMpdMultiSelect 
        where engMpdMultiItems.Select(o => o.ENG_MPD_MYTECHNIC_TASK_NO). 
        NOTContains(m.ENG_MPD_MYTECHNIC_TASK_NO) 
        select m); 

回答

6

使用!運營商,像這樣:

var ResultsOfMPD = from m in engMpdMultiSelect 
        where !engMpdMultiItems.Select(o => o.ENG_MPD_MYTECHNIC_TASK_NO). 
        Contains(m.ENG_MPD_MYTECHNIC_TASK_NO) 
        select m; 

順便說一句,你不需要Select()電話。
相反,你可以寫

var ResultsOfMPD = from m in engMpdMultiSelect 
        where !engMpdMultiItems.Any(o => o.ENG_MPD_MYTECHNIC_TASK_NO == m.ENG_MPD_MYTECHNIC_TASK_NO) 
        select m; 

或者等價地,

var ResultsOfMPD = from m in engMpdMultiSelect 
        where engMpdMultiItems.All(o => o.ENG_MPD_MYTECHNIC_TASK_NO != m.ENG_MPD_MYTECHNIC_TASK_NO) 
        select m; 
+0

我該如何使用? !()包含(... – Penguen 2010-07-23 14:15:24

+0

如果Foo()返回布爾值,那麼!Foo()返回相反的值,因此如果是engMpdMultiItems.Select()。Contains()返回布爾值,!engMpdMultiItems.Select()。Contains()返回相反。 – Tergiver 2010-07-23 14:21:53

0
var ResultsOfMPD = from m in engMpdMultiSelect 
        where engMpdMultiItems.All(x => x.ENG_MPD_MYTECHNIC_TASK_NO != m.ENG_MPD_MYTECHNIC_TASK_NO) 
        select m; 
0

怎麼樣Except method

僅供參考 - 在集合論中,這稱爲相對補償。也就是說,給定兩個集合A和B,B中但不是A中所有元素的集合被稱爲集合A相對於集合B的相對補集。但不包含或除外。

相關問題