我如何过滤数据表?
我使用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"
如果您至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"