我有一个包含用户信息的数据表,我想在此数据表中搜索用户或用户列表。
这是我的 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"
如果您至少使用 .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 的引用(How)。
使用它:
.CopyToDataTable()
示例:
string _sqlWhere = "Nachname = 'test'";
string _sqlOrder = "Nachname DESC";
DataTable _newDataTable = yurDataTable.Select(_sqlWhere, _sqlOrder).CopyToDataTable();
有时您实际上想要返回
DataTable
而不是 DataView
。所以 DataView
对我来说并不好,我想很少有人会想要这样。这是我以前做的事情
myDataTable.select("myquery").CopyToDataTable()
这将过滤数据表
myDataTable
并返回一个新的DataTable
对于任何使用 VB.NET 工作的人(以防万一)
Dim dv As DataView = yourDatatable.DefaultView
dv.RowFilter ="query" ' ex: "parentid = 0"
最好使用 DataView 来完成此任务。
您可以在这篇文章中找到使用它的示例:如何在数据视图中过滤数据
嗨,我们可以使用 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>();
}