我使用一个DataTable与有关用户的信息,我想寻找一个或多个用户在此数据表中的列表。 我尝试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 dv = new DataView(yourDatatable);
dv.RowFilter = "query"; // query example = "id = 10"
http://www.csharp-examples.net/dataview-rowfilter/
如果您使用至少.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( 如何 )。
明确:
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();
对于谁在VB.NET工作的任何人(以防万一)
Dim dv As DataView = yourDatatable.DefaultView
dv.RowFilter ="query" ' ex: "parentid = 0"
这是更好地使用数据视图此任务。
在使用它的例子,你可以在这个帖子找到: 如何过滤数据视图中的数据
有时候,你真的想返回一个DataTable比数据视图。 因此,一个数据视图是不是在我的情况很好,我想很少人会想太多。 这是我用来做
myDataTable.select( “更改为MyQuery”)。CopyToDataTable()
这会过滤myDataTable这是一个DataTable,并返回一个新的DataTable
希望有人会发现非常有用
嗨,我们可以使用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>();
}