it-swarm.com.ru

Как я могу отфильтровать данные?

Я использую DataTable с информацией о пользователях и хочу найти пользователя или список пользователей в этой DataTable. Я пытаюсь, но это не работает :( 

Вот мой код 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; 
        }
60
Tarasov

Вы можете использовать DataView.

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


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

96
Kadir

Если вы используете хотя бы .NET 3.5, я бы предложил использовать вместо него Linq-To-DataTable, поскольку он намного более читабелен и мощен:

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

Приведенный выше код является лишь примером, на самом деле у вас есть доступно гораздо больше методов

Не забудьте добавить using System.Linq; и для метода расширения AsEnumerable ссылку на dll System.Data.DataSetExtensions ( How ).

83
Rango

чисто:

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

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

использовать:

.CopyToDataTable()

пример:

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

DataTable _newDataTable = yurDateTable.Select(_sqlWhere, _sqlOrder).CopyToDataTable();
11
VolkanCetinkaya

Для тех, кто работает в VB.NET (на всякий случай)

Dim dv As DataView = yourDatatable.DefaultView

dv.RowFilter ="query" ' ex: "parentid = 0"
5
nghiavt

Для этой задачи лучше использовать DataView.

Пример его использования вы можете найти в этом посте: Как отфильтровать данные в dataview

4
Maxim Kornilov

Иногда вы действительно хотите вернуть DataTable, а не DataView. Таким образом, DataView не был хорош в моем случае, и я думаю, что немногие другие захотят этого тоже. Вот что я делал раньше

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

Это отфильтрует myDataTable, который является DataTable, и вернет новый DataTable.

Надеюсь, кто-то найдет это полезным

1
Dilaksha A

Привет, мы можем использовать метод ToLower, иногда это не фильтр.

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