如何才能筛选的DataTable?(How I can filter a Datatable?)

2019-06-18 14:21发布

我使用一个DataTable与有关用户的信息,我想寻找一个或多个用户在此数据表中的列表。 我尝试butit不工作:(

这里是我的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; 
        }

Answer 1:

您可以使用数据视图。

DataView dv = new DataView(yourDatatable);
dv.RowFilter = "query"; // query example = "id = 10"


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



Answer 2:

如果您使用至少.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();

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

记得添加using System.Linq; 和用于AsEnumerable扩展方法的一个参考System.Data.DataSetExtensions DLL( 如何 )。



Answer 3:

明确:

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

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

使用:

.CopyToDataTable()

例:

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

DataTable _newDataTable = yurDateTable.Select(_sqlWhere, _sqlOrder).CopyToDataTable();


Answer 4:

对于谁在VB.NET工作的任何人(以防万一)

Dim dv As DataView = yourDatatable.DefaultView

dv.RowFilter ="query" ' ex: "parentid = 0"


Answer 5:

这是更好地使用数据视图此任务。

在使用它的例子,你可以在这个帖子找到: 如何过滤数据视图中的数据



Answer 6:

有时候,你真的想返回一个DataTable比数据视图。 因此,一个数据视图是不是在我的情况很好,我想很少人会想太多。 这是我用来做

myDataTable.select( “更改为MyQuery”)。CopyToDataTable()

这会过滤myDataTable这是一个DataTable,并返回一个新的DataTable

希望有人会发现非常有用



Answer 7:

嗨,我们可以使用ToLower将方法有时不进行过滤。

EmployeeId = Session["EmployeeID"].ToString();
var rows = dtCrewList.AsEnumerable().Where
   (row => row.Field<string>("EmployeeId").ToLower()== EmployeeId.ToLower());

   if (rows.Any())
   {
        tblFiltered = rows.CopyToDataTable<DataRow>();
   }


文章来源: How I can filter a Datatable?