我有一个数据表,我想使用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();
任何帮助都将不胜感激。
由于
答案 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();