Ich verwende eine Datentabelle mit Informationen zu Benutzern und möchte einen Benutzer oder eine Liste von Benutzern in dieser Datentabelle suchen. Ich versuche es, aber es funktioniert nicht :(
Hier ist mein c # -Code:
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;
}
Sie können DataView verwenden.
DataView dv = new DataView(yourDatatable);
dv.RowFilter = "query"; // query example = "id = 10"
Wenn Sie mindestens .NET 3.5 verwenden, würde ich empfehlen, stattdessen Linq-To-DataTable
zu verwenden, da es viel lesbarer und leistungsfähiger ist:
DataTable tblFiltered = table.AsEnumerable()
.Where(row => row.Field<String>("Nachname") == username
&& row.Field<String>("Ort") == location)
.OrderByDescending(row => row.Field<String>("Nachname"))
.CopyToDataTable();
Der obige Code ist nur ein Beispiel, tatsächlich haben Sie viele weitere Methoden .
Denken Sie daran, using System.Linq;
und für die Erweiterungsmethode AsEnumerable
einen Verweis auf die System.Data.DataSetExtensions
-DLL ( How ) hinzuzufügen.
klar:
list = null; // for testing
list = new DataTable(); // for testing
foreach (DataRow row in rows)
{
list.ImportRow(row);
}
benutzen:
.CopyToDataTable()
beispiel:
string _sqlWhere = "Nachname = 'test'";
string _sqlOrder = "Nachname DESC";
DataTable _newDataTable = yurDateTable.Select(_sqlWhere, _sqlOrder).CopyToDataTable();
Für alle, die in VB.NET arbeiten (nur für den Fall)
Dim dv As DataView = yourDatatable.DefaultView
dv.RowFilter ="query" ' ex: "parentid = 0"
Es ist besser, DataView für diese Aufgabe zu verwenden.
Beispiel für die Verwendung finden Sie in diesem Beitrag: So filtern Sie Daten in der Datenansicht
Manchmal möchten Sie tatsächlich eine DataTable als eine DataView zurückgeben. Eine DataView war in meinem Fall also nicht gut und ich denke, das wollen auch nur wenige. Hier ist was ich früher gemacht habe
myDataTable.select ("myquery"). CopyToDataTable ()
Dadurch wird myDataTable, eine DataTable, gefiltert und eine neue DataTable zurückgegeben
Ich hoffe, jemand findet das nützlich
Hallo, wir können die ToLower-Methode verwenden, manchmal ist es kein 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>();
}