2013-07-05 102 views
0

我有一個數據表,如:篩選的DataTable

ID | ID2 
    -------- 
    1 | 2 
    1 | 3 
    12 | 2 
    15 | 3 

我需要過濾與ID2數據表(我知道在這種情況下,2兩個ID2值和3)以這樣的方式,我應該得到的輸出as

ID | ID2 
    -------- 
    1 | 2 
    1 | 3 

這意味着應該選擇具有兩個ID2(2和3)的ID。

dt.Select(「ID2 = 2 AND ID2 = 3」);在這種情況下不起作用。

感謝

+0

這是不可能告訴你的意圖是什麼。如果你想要所有具有ID2 == 3 && ID2 == 2的行,那麼沒有東西會匹配,因爲ID2只能保存一個值。另一方面,ID2 == 3 || ID2 == 2匹配示例表的所有行。你想要一個ID == 1的過濾器嗎? – Odrade

回答

3

目前尚不清楚你在尋找什麼。
如果要提取所有其中用於ID列相同值出現然後兩次或更多次的行

的DataRow []行= dt.Select(「計數(ID)> 1)」)

你說得對,這不適用於沒有關係的數據表。
我發現USIG LINQ的一個解決方案,

// Returns an IGrouping<int,DataRow> for every ID that appears more than one time 
var result = dt.AsEnumerable().GroupBy(z => z.Field<int>("ID")) 
      .Select(q=> new{Count = q.Count(), ID=q.Key}) 
      .Where(x => x.Count > 1); 

// Now we could extract the rows in the usual way 
foreach(var l in result) 
{ 
    DataRow[] r = dt.Select("ID=" + l.ID); 
    r.Dump(); 
} 

我不知道如何有效的是這樣的,但至少這似乎工作

+0

+很好。這似乎是OP正在尋找的東西。 –

+0

這是行不通的..我仍然得到所有的行而不是2和3共同的行 – user1882705

0

你可以根據你應該ID過濾期望的結果使用LINQ到數據集

var rows = table.AsEnumerable().Where(r => r.Field<int>("ID") == 1);    

BTW。

+0

我認爲OP想要根據ID2的值檢索結果,而不是ID ... –

+0

@ThomasLevesque但樣本結果按ID篩選 –

+0

所有結果行具有相同ID的事實並不表示行*通過ID過濾*在這種情況下,這是其他一些過濾的結果。 –