2013-08-02 55 views
2

我有一個數據表,我想用LINQ過濾一個字符串列表,每個字符串用管道('|')分隔,並且包含兩個值。 字符串的列表(List Actions)看起來像這樣。這只是這個列表中的兩個字符串,但它可以有更多。如何使用LINQ過濾需要分割的Lst字符串的數據表?

8/1/2013 9:57:52 PM|Login for [email protected] 
    8/1/2013 9:57:37 PM|Login for [email protected] 

數據表在每行五(5)領域,我使用的每根弦從上面的列表比較兩個字段(文本和時間)在數據表中省略或刪除那些行。 數據表的結構是這樣

DataTable stdTable = new DataTable("Actions"); 
    DataColumn col1 = new DataColumn("Area"); 
    DataColumn col2 = new DataColumn("Action"); 
    DataColumn col3 = new DataColumn("Time"); 
    DataColumn col4 = new DataColumn("Text"); 

目前我手動執行這一切,但我知道它可以在LINQ做,只需幾行代碼。我不知道如何遍歷列表並使用拆分。我看到了這個例子,但分裂超出了我。

// Get all checked id's. 
    var ids = chkGodownlst.Items.OfType<ListItem>() 
    .Where(cBox => cBox.Selected) 
    .Select(cBox => cBox.Value) 
    .ToList(); 

    // Now get all the rows that has a CountryID in the selected id's list. 
    var a = dt.AsEnumerable().Where(r => 
    ids.Any(id => id == r.Field<int>("CountryID")) 
    ); 

    // Create a new table. 
    DataTable newTable = a.CopyToDataTable(); 

任何幫助,將不勝感激。

感謝

回答

2
List<string> list = { 
         "8/1/2013 9:57:52 PM|Login for [email protected]", 
         "8/1/2013 9:57:37 PM|Login for [email protected]" 
        }; 
var a = dt.AsEnumerable().Where(x=> 
       !list.Select(y=> new { 
            Time = DateTime.Parse(y.Split('|')[0]), 
            Text = y.Split('|')[1] 
            }) 
        .Any(z=> z.Time == x.Time && z.Text == x.Text)); 

var a = dt.AsEnumerable().Where(x=> 
        !list.Any(y=> y == string.Format("{0}|{1}",x["Time"],x["Text"]))); 

DataTable newTable = a.CopyToDataTable(); 
+0

WOW!這工作像一個魅力。非常感謝你。我用了第二個。 –

+0

@BillLock很高興知道它可以幫助你,但是我也希望接受我的回答,從你:) –