Ich verwende eine DataTable mit Informationen zu Benutzern und möchte einen Benutzer oder eine Liste von Benutzern in dieser DataTable 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;
}
Antworten:
Sie können DataView verwenden.
DataView dv = new DataView(yourDatatable); dv.RowFilter = "query"; // query example = "id = 10"
http://www.csharp-examples.net/dataview-rowfilter/
quelle
Wenn Sie mindestens .NET 3.5 verwenden, würde ich empfehlen,
Linq-To-DataTable
stattdessen 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 stehen Ihnen viel mehr Methoden zur Verfügung .
Denken Sie daran, einen Verweis auf die DLL ( How )
using System.Linq;
für dieAsEnumerable
Erweiterungsmethode hinzuzufügen .System.Data.DataSetExtensions
quelle
DataTable
behalte sie. Ansonsten würde ich ein bevorzugen,List<CustomClass>
weil du kein Boxen / Unboxen hast. ADataTable
verwendetSystem.Object
für alles, so dass Sie immer werfen müssen. Eine benutzerdefinierte Klasse mit aussagekräftigen Eigenschaften bietet neben der Lesbarkeit noch viele weitere Vorteile.klar:
list = null; // for testing list = new DataTable(); // for testing foreach (DataRow row in rows) { list.ImportRow(row); }
verwenden:
Beispiel:
string _sqlWhere = "Nachname = 'test'"; string _sqlOrder = "Nachname DESC"; DataTable _newDataTable = yurDateTable.Select(_sqlWhere, _sqlOrder).CopyToDataTable();
quelle
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"
quelle
Manchmal möchten Sie tatsächlich a
DataTable
als a zurückgebenDataView
. AlsoDataView
war a in meinem Fall nicht gut und ich denke, nur wenige andere würden das auch wollen. Hier ist, was ich früher gemacht habemyDataTable.select("myquery").CopyToDataTable()
Dadurch wird gefiltert,
myDataTable
welches eine DataTable ist, und eine neue zurückgegebenDataTable
Hoffe, jemand wird das nützlich finden
quelle
Es ist besser, DataView für diese Aufgabe zu verwenden.
Ein Beispiel für die Verwendung finden Sie in diesem Beitrag: So filtern Sie Daten in der Datenansicht
quelle
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>(); }
quelle