我使用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;
}
答案 0 :(得分:101)
您可以使用DataView。
DataView dv = new DataView(yourDatatable);
dv.RowFilter = "query"; // query example = "id = 10"
答案 1 :(得分:88)
如果您至少使用.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();
上面的代码只是一个例子,实际上你有many more methods available。
请务必添加using System.Linq;
,并为AsEnumerable
扩展程序添加对System.Data.DataSetExtensions
dll(How)的引用。
答案 2 :(得分:11)
明确:
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();
答案 3 :(得分:7)
对于任何使用VB.NET的人(以防万一)
Dim dv As DataView = yourDatatable.DefaultView
dv.RowFilter ="query" ' ex: "parentid = 0"
答案 4 :(得分:4)
最好使用DataView执行此任务。
您可以在此帖中找到使用它的示例:How to filter data in dataview
答案 5 :(得分:1)
有时您实际上想要返回DataTable
而不是DataView
。所以DataView
在我的情况下并不好,我猜其他人也不会想要这样。这是我以前做的事情
myDataTable.select("myquery").CopyToDataTable()
这将过滤myDataTable
这是一个DataTable并返回一个新的DataTable
希望有人会发现这很有用
答案 6 :(得分:0)
嗨我们可以使用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>();
}