【问题标题】:c# datatable filter using a string value [duplicate]c#使用字符串值的数据表过滤器[重复]
【发布时间】:2016-08-26 08:43:47
【问题描述】:

我正在尝试实现另一个要求,其中我在数据表中有数据,如下所示

DataTable tableold = new DataTable();
tableold.Columns.Add("Dosage", typeof(string));
tableold.Columns.Add("Drug", typeof(string));
tableold.Columns.Add("Patient", typeof(string));
tableold.Columns.Add("Date", typeof(DateTime));

// Here we add five DataRows.
tableold.Rows.Add(#25, "Indocin", "David", DateTime.Now);
tableold.Rows.Add(#50, "Enebrel", "Sam", DateTime.Now);
tableold.Rows.Add(#10, "Hydralazine", "Christoff", DateTime.Now);
tableold.Rows.Add(#21, "Combivent", "Janet", DateTime.Now);
tableold.Rows.Add(#100, "Dilantin", "Melanie", DateTime.Now);

现在我有一个如下所示的字符串数组

string[] values; (which contains {#25, #50, #10} values)

我需要删除字符串数组中存在的 tableold(基表)中的值。 (我知道我问这个很尴尬,但我是新手)

所以我需要更新的数据表(tableold)看起来像这样:

21, "Combivent", "Janet", "10:20:00"
100, "Dilantin", "Melanie", "10:20:00"

如何在 c# 或 LinQ 中编写这样的查询

请帮忙!谢谢

【问题讨论】:

  • 这和你的previous question有什么区别?....
  • 如果您真的想从DataTable 中删除记录,这绝对不是 LINQ 任务。在 DataTable 文档中搜索相应的方法(如何查找具有给定条件的行、如何删除行等)

标签: c# linq datatable


【解决方案1】:

使用 LINQ:

var newRows = tableold.AsEnumerable().Where(r => !values.Contains(r.Field<string>("Dosage")));
if(newRows.Any())
    tableold = newRows.CopyToDataTable();
else
    tableold = tableold.Clone(); // empty

【讨论】:

    【解决方案2】:

    问题有点不清楚,我知道你想从输出中排除一些ids。你可以使用Linq 来做这样的事情

    // list of Ids to exclude
    var ids = new List<int>() {25, 50, 10};
    
    // filter table.    
    var newTable = tableold.AsEnumerable()
            .Where(x=> !ids.Contains(x.Field<int>("Dosage")))
            .CopyToDataTable();
    

    查看demo

    【讨论】:

      猜你喜欢
      • 2020-11-13
      • 2017-10-30
      • 1970-01-01
      • 2019-12-27
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2021-10-03
      相关资源
      最近更新 更多