我如何过滤数据表?

我使用DataTable和用户的信息,我想在这个DataTable中search用户或用户列表。 我尝试它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; } 

你可以使用DataView。

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

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

如果您至less使用.NET 3.5,我会build议使用Linq-To-DataTable因为它的可读性和function更强大:

 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( How )。

明确:

 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(); 

这个任务最好使用DataView。

使用它的例子,你可以在这篇文章中find: 如何过滤dataview中的数据

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

 Dim dv As DataView = yourDatatable.DefaultView dv.RowFilter ="query" ' ex: "parentid = 0"