我如何过滤数据表?

Tar*_*sov 68 c# asp.net datatable filter dataset

我使用DataTable和有关用户的信息,我希望在此DataTable中搜索用户或用户列表.我试试但是不起作用:(

这是我的c#代码:

 public DataTable GetEntriesBySearch(string username,string location,DataTable table)
        {
            list = null;
            list = table;

            string expression;
            string sortOrder;

            expression = "Nachname = 'test'";
            sortOrder = "nachname DESC";

            DataRow[] rows =  list.Select(expression, sortOrder);

            list = null; // for testing
            list = new DataTable(); // for testing

            foreach (DataRow row in rows)
            {
                list.ImportRow(row);
            }

            return list; 
        }
Run Code Online (Sandbox Code Playgroud)

Kad*_*dir 107

您可以使用DataView.

DataView dv = new DataView(yourDatatable);
dv.RowFilter = "query"; // query example = "id = 10"
Run Code Online (Sandbox Code Playgroud)


http://www.csharp-examples.net/dataview-rowfilter/


Tim*_*ter 93

如果你至少使用.NET 3.5,我会建议使用Linq-To-DataTable它,因为它更具可读性和强大性:

DataTable tblFiltered = table.AsEnumerable()
          .Where(row => row.Field<String>("Nachname") == username
                   &&   row.Field<String>("Ort") == location)
          .OrderByDescending(row => row.Field<String>("Nachname"))
          .CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

上面的代码只是一个例子,实际上你有更多的方法可用.

请记住using System.Linq;AsEnumerable扩展方法添加对System.Data.DataSetExtensionsdll(How)的引用.

  • 注意事项 - CopyToDataTable()复制数据行.这不是克隆操作,因此原始表中的某些属性不会复制到例如表名 (3认同)
  • @RajeshMishra:如果你已经有一个填充的`DataTable`保留它.否则我更喜欢`List <CustomClass>`,因为你没有装箱/拆箱.一个`DataTable`使用`System.Object`来处理所有内容,所以你总是需要强制转换.除了可读性之外,具有有意义属性的自定义类还具有许多其他优点. (2认同)

Vol*_*aya 12

明确:

list = null; // for testing
list = new DataTable(); // for testing

foreach (DataRow row in rows)
{
    list.ImportRow(row);
}
Run Code Online (Sandbox Code Playgroud)

使用:

.CopyToDataTable()
Run Code Online (Sandbox Code Playgroud)

例:

string _sqlWhere = "Nachname = 'test'";
string _sqlOrder = "Nachname DESC";

DataTable _newDataTable = yurDateTable.Select(_sqlWhere, _sqlOrder).CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)

  • 你能更详细地解释一下为什么这是对所问问题的回答吗? (2认同)

小智 9

有时您实际上想要返回 a DataTablethan a DataView。所以 aDataView对我来说不好,我想很少有人也会想要它。这是我以前做的

myDataTable.select("myquery").CopyToDataTable()
Run Code Online (Sandbox Code Playgroud)

这将过滤myDataTable哪个是 DataTable 并返回一个新的DataTable

希望有人会发现这是有用的


小智 7

对于任何使用VB.NET的人(以防万一)

Dim dv As DataView = yourDatatable.DefaultView

dv.RowFilter ="query" ' ex: "parentid = 0"
Run Code Online (Sandbox Code Playgroud)


Max*_*lov 5

最好将 DataView 用于此任务。

您可以在这篇文章中找到使用它的示例:How to filter data in dataview