it-swarm.com.de

Wie kann ich eine Datentabelle filtern?

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; 
        }
60
Tarasov

Sie können DataView verwenden.

DataView dv = new DataView(yourDatatable);
dv.RowFilter = "query"; // query example = "id = 10"


http://www.csharp-examples.net/dataview-rowfilter/

96
Kadir

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.

83
Rango

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();
11
VolkanCetinkaya

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"
5
nghiavt

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

4
Maxim Kornilov

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

1
Dilaksha A

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>();
   }
0
Santosh Kumar