【问题标题】:C# create DataView from DataViewC# 从 DataView 创建 DataView
【发布时间】:2015-08-25 07:06:18
【问题描述】:

我想通过过滤现有的 DataView 创建一个新的 DataView,但是我遇到了麻烦,因为 DataView 没有 .AsEnumerable() 方法并且没有实现 IEnumerable{DataRow}。

这基本上是我想要完成的:

//Some table.
DataTable dt = new DataTable();

//Somewhere in here the table is given columns and rows...

//The first view shows some subset of the table.  
//(This works fine.)
DataView dv1 = dt.AsEnumerable()
    .Where(r => r.Field<int>("ID") < 1000)
    .AsDataView();

//The second view should show a subset of the first view, but I cannot find the methods to do this.
//(This does not compile.)
DataView dv2 = dv1.AsEnumerable()
    .Where(r => r.Field<int>("Salary") > 50000)
    .AsDataView();

到目前为止我想出的最好的东西是

DataView dv2 = dv1.ToDataTable().AsEnumerable()
   .Where(r => r.Field<int>("Salary") > 50000)
   .AsDataView();

这很难看,我猜效率很低。

从视图中生成视图的最佳方法是什么?

【问题讨论】:

  • 也可能是一个问题,你用r.Field&lt;string&gt;("Salary") &gt; 50000询问一个字符串是否大于一个整数
  • 谢谢Jonesopolis,这是我在将一些实际上并非从源代码文件复制的示例代码拼凑在一起时的疏忽。

标签: c# linq ado.net


【解决方案1】:

在单独的 IEnumerable 中创建第一个过滤器,然后使用它来创建两个数据视图:

var filtered = dt.AsEnumerable()
                 .Where(r => r.Field<int>("ID") < 1000);


DataView dv1 = filtered.AsDataView();

DataView dv2 = filtered.Where(r => r.Field<string>("Salary") > 50000)
                       .AsDataView();

【讨论】:

    猜你喜欢
    • 2018-07-16
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多