如何使用LINQ根据需要拆分的字符串列表过滤数据表?

时间:2013-08-02 02:21:51

标签: c# linq list datatable split

我有一个数据表,我想使用LINQ来过滤字符串列表,每个字符串使用管道('|')分隔,并包含两个值。 字符串的列表(List Actions)如下所示。这个列表中只有两个字符串,但它可以有更多字符串。

    8/1/2013 9:57:52 PM|Login for bill.lock@cap.com
    8/1/2013 9:57:37 PM|Login for bill.lock@cap.com

数据表每行有五(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();

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:2)

List<string> list = {
                       "8/1/2013 9:57:52 PM|Login for bill.lock@cap.com",
                       "8/1/2013 9:57:37 PM|Login for bill.lock@cap.com"
                    };
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();