2015-05-04 99 views
0

我在DataTable中有2列「PriceList」和「Group」。C#Datatable filter

PriceList contains, List1, List2, List3 

組包含,組1,第2組,第3組

var checkValues1 = new string[] { "List1", "List2" }; 

var checkValues2 = new string[] { "Group" }; 

這工作

   dt.AsEnumerable().ToList().ForEach(x => 
       { 
        if (checkValues1.Contains(x["PriceList"])) 
        { 
         newDT.ImportRow(x); //Copy 
         DT.Rows.Remove(x); //Remove 
        } 
       }); 

,但我不能得到這個工作

   dt.AsEnumerable().ToList().ForEach(x => 
       { 
        if (checkValues2.Contains(x["Group"])) 
        { 
         newDT.ImportRow(x); //Copy 
         DT.Rows.Remove(x); //Remove 
        } 
       }); 

看來,這需要精確匹配,所以它只會工作r當組名稱完全是「組」時,我希望它匹配子串,因此「組」可以匹配Group1,Group2,Group 3. 有沒有辦法做到這一點?

+0

你想要多少級別的定製?從給定的字符串開始,包含給定的字符串,從列表中的任何字符串開始,包含列表中的任何給定字符串...? – Pinx0

+0

我只是希望能夠匹配列名稱的子串,所以對於組我希望能夠使用「Gr」「Group」等,並從Group1,Group2,Group 3中獲得匹配。 – Akjell

回答

0

爲此,您可以使用以函數開頭。下面是 就是例子。

dt.AsEnumerable().ToList().ForEach(x => 
{ 
if (checkValues2.Any(t => t.StartsWith((x["Group"])))) 
{ 
newDT.ImportRow(x); //Copy 
DT.Rows.Remove(x); //Remove 
} 
}); 
+0

sampple中的一些修正代碼:if(checkValues2.Any(t => t.StartsWith(x [「Group」]。ToString()))) –

+0

我不能得到這個工作,或者我沒有得到任何命中,但如果我使用讓我們說「Group1」在checkValues2中它可以工作,但不適用於「Group」。 – Akjell