J'utilise un DataTable avec des informations sur les utilisateurs et je souhaite rechercher un utilisateur ou une liste d'utilisateurs dans ce DataTable. Je l'essaie mais ça ne marche pas :(
Voici mon code 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;
}
Vous pouvez utiliser DataView.
DataView dv = new DataView(yourDatatable);
dv.RowFilter = "query"; // query example = "id = 10"
Si vous utilisez au moins .NET 3.5, je vous conseillerais plutôt d'utiliser Linq-To-DataTable
, car il est beaucoup plus lisible et puissant:
DataTable tblFiltered = table.AsEnumerable()
.Where(row => row.Field<String>("Nachname") == username
&& row.Field<String>("Ort") == location)
.OrderByDescending(row => row.Field<String>("Nachname"))
.CopyToDataTable();
Le code ci-dessus n’est qu’un exemple. En fait, vous avez beaucoup plus de méthodes disponibles .
Pensez à ajouter using System.Linq;
et à la méthode d'extension AsEnumerable
une référence à la dll System.Data.DataSetExtensions
( How ).
clair:
list = null; // for testing
list = new DataTable(); // for testing
foreach (DataRow row in rows)
{
list.ImportRow(row);
}
utilisation:
.CopyToDataTable()
exemple:
string _sqlWhere = "Nachname = 'test'";
string _sqlOrder = "Nachname DESC";
DataTable _newDataTable = yurDateTable.Select(_sqlWhere, _sqlOrder).CopyToDataTable();
Pour tous ceux qui travaillent dans VB.NET (juste au cas où)
Dim dv As DataView = yourDatatable.DefaultView
dv.RowFilter ="query" ' ex: "parentid = 0"
Il est préférable d'utiliser DataView pour cette tâche.
Vous pouvez trouver dans cet article un exemple d'utilisation: Comment filtrer des données dans Dataview
Parfois, vous souhaitez réellement renvoyer un DataTable à un DataView. Donc, un DataView n’était pas bon dans mon cas et je suppose que peu d’autres le voudraient aussi. Voici ce que je faisais
myDataTable.select ("myquery"). CopyToDataTable ()
Cela va filtrer myDataTable qui est un DataTable et retourner un nouveau DataTable
J'espère que quelqu'un trouvera cela utile
Salut, nous pouvons utiliser la méthode ToLower parfois, il ne s'agit pas de filtre.
EmployeeId = Session["EmployeeID"].ToString();
var rows = dtCrewList.AsEnumerable().Where
(row => row.Field<string>("EmployeeId").ToLower()== EmployeeId.ToLower());
if (rows.Any())
{
tblFiltered = rows.CopyToDataTable<DataRow>();
}