Jak mogę filtrować dane?

Używam DataTable z informacjami o użytkownikach i chcę przeszukać użytkownika lub listę użytkowników w tym DataTable. Próbuję ale nie działa: (

Oto Mój kod 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; 
        }
Author: Rodrigo Guedes, 2012-10-22

7 answers

Możesz użyć DataView.

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


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

 123
Author: Kadir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-22 13:39:34

Jeśli używasz co najmniej. NET 3.5, sugerowałbym użycie Linq-To-DataTable zamiast tego, ponieważ jest o wiele bardziej czytelny i wydajny:

DataTable tblFiltered = table.AsEnumerable()
          .Where(row => row.Field<String>("Nachname") == username
                   &&   row.Field<String>("Ort") == location)
          .OrderByDescending(row => row.Field<String>("Nachname"))
          .CopyToDataTable();

Powyższy kod to tylko przykład, w rzeczywistości masz wiele innych dostępnych metod .

Pamiętaj, aby dodać using System.Linq; i dla metody rozszerzenia AsEnumerable odniesienie do System.Data.DataSetExtensions dll (Jak ).

 104
Author: Tim Schmelter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:24

Wyczyść:

list = null; // for testing
list = new DataTable(); // for testing

foreach (DataRow row in rows)
{
    list.ImportRow(row);
}

Użycie:

.CopyToDataTable()

Przykład:

string _sqlWhere = "Nachname = 'test'";
string _sqlOrder = "Nachname DESC";

DataTable _newDataTable = yurDateTable.Select(_sqlWhere, _sqlOrder).CopyToDataTable();
 13
Author: VolkanCetinkaya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-13 15:46:15

Dla każdego, kto pracuje w VB.NET (na wszelki wypadek)

Dim dv As DataView = yourDatatable.DefaultView

dv.RowFilter ="query" ' ex: "parentid = 0"
 9
Author: nghiavt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-11 15:01:13

Czasami chcesz zwrócić DataTable niż DataView. Więc a DataView nie było dobre w moim przypadku i myślę, że kilka innych też by tego chciało. Oto co kiedyś robiłem

myDataTable.select("myquery").CopyToDataTable()

To filtruje myDataTable który jest DataTable i zwraca Nowy DataTable

Mam nadzieję, że ktoś znajdzie coś przydatnego

 7
Author: Dilaksha A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-13 08:29:33

Lepiej jest użyć DataView do tego zadania.

Przykład jego użycia znajdziesz w tym poście: Jak filtrować dane w dataview

 4
Author: Maxim Kornilov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:54

Cześć możemy użyć metody Tolowera czasami nie jest to filtr.

EmployeeId = Session["EmployeeID"].ToString();
var rows = dtCrewList.AsEnumerable().Where
   (row => row.Field<string>("EmployeeId").ToLower()== EmployeeId.ToLower());

   if (rows.Any())
   {
        tblFiltered = rows.CopyToDataTable<DataRow>();
   }
 2
Author: Santosh Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-30 12:41:53