如何筛选数据表?

我使用带有用户信息的 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;
}
379773 次浏览

It is better to use DataView for this task.

Example of the using it you can find in this post: How to filter data in dataview

If you're using at least .NET 3.5, i would suggest to use Linq-To-DataTable instead since it's much more readable and powerful:

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

Above code is just an example, actually you have many more methods available.

Remember to add using System.Linq; and for the AsEnumerable extension method a reference to the System.Data.DataSetExtensions dll (How).

You can use DataView.

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


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

use it:

.CopyToDataTable()

example:

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


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

For anybody who work in VB.NET (just in case)

Dim dv As DataView = yourDatatable.DefaultView


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

Hi we can use ToLower Method sometimes it is not filter.

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


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

Sometimes you actually want to return a DataTable than a DataView. So a DataView was not good in my case and I guess few others would want that too. Here is what I used to do

myDataTable.select("myquery").CopyToDataTable()

This will filter myDataTable which is a DataTable and return a new DataTable

Hope someone will find that is useful