2

我有一个数据表,我想使用 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();

任何帮助,将不胜感激。

谢谢

4

1 回答 1

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();
于 2013-08-02T02:47:22.727 回答