c#如何从DataTable构建自定义DataView?

时间:2018-02-06 19:08:47

标签: c# datatable ado.net dataview

我需要从DataTable创建一个DataView,但有一个不寻常的转折:

我需要逐行决定(使用代码)DataTable中哪些行包含在DataView中。

DataTable dt = LoadData();
DataView dv = new DataView(dt);

foreach (DataRow row in dt.Rows)
{
    if (RowIsGood(row))
    { 
        // This obviously doesn't work but I need equivalent logic:
        DataRowView drv = new DataRowView();
        drv.Row = row;
        dv.Add(drv);
    }
}

需要注意的一些重要事项:

  1. 上面RowIsGood函数中的代码太复杂,无法使用标准RowFilter方法进行复制。
  2. DataTable有可能非常大。它也由多个网格控件引用。无法将临时列添加到DataTable以促进RowFilter操作。
  3. 我正在使用.NET v4.0。
  4. 那么甚至可以使用DataTable / DataView架构吗?

    LINQ是否允许我自定义我需要的DataView?

    提前致谢!

2 个答案:

答案 0 :(得分:2)

由于您正在寻找逐行解决方案,并且已经有一个带有DataRow并返回bool的函数。

只需将参考添加到System.Data.DataSetExtensions 并使用AsDataView方法

DataView dv=DT.AsEnumerable().Where(RowIsGood).AsDataView();

答案 1 :(得分:1)

DataView dv = (from n in DT.AsEnumerable() Where RowIsGood(n) select n ).AsDataView();