Ответ 1
Вы можете использовать DataView.
DataView dv = new DataView(yourDatatable);
dv.RowFilter = "query"; // query example = "id = 10"
Я использую DataTable с информацией о пользователях, и я хочу искать пользователя или список пользователей в этом DataTable. Я стараюсь, но не работает:(
Вот мой код С#:
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;
}
Вы можете использовать DataView.
DataView dv = new DataView(yourDatatable);
dv.RowFilter = "query"; // query example = "id = 10"
Если вы используете хотя бы .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
ссылку на System.Data.DataSetExtensions
dll (How).
ясно:
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();
Для тех, кто работает в VB.NET(на всякий случай)
Dim dv As DataView = yourDatatable.DefaultView
dv.RowFilter ="query" ' ex: "parentid = 0"
Лучше использовать DataView для этой задачи.
Пример его использования можно найти в этом сообщении: Как фильтровать данные в dataview
Иногда вы действительно хотите вернуть DataTable
не DataView
. Таким образом, DataView
не был хорош в моем случае, и я думаю, мало кто захочет этого тоже. Вот что я делал раньше
myDataTable.select("myquery").CopyToDataTable()
Это отфильтрует myDataTable
который является DataTable, и вернет новый DataTable
Надеюсь, кто-то найдет это полезным
Привет, мы можем использовать метод 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>();
}