我如何过滤数据表?

时间:2012-10-22 13:34:10

标签: c# asp.net filter datatable dataset

我使用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; 
        }

7 个答案:

答案 0 :(得分:101)

您可以使用DataView。

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


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

答案 1 :(得分:88)

如果您至少使用.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();

上面的代码只是一个例子,实际上你有many more methods available

请务必添加using System.Linq;,并为AsEnumerable扩展程序添加对System.Data.DataSetExtensions dll(How)的引用。

答案 2 :(得分:11)

明确:

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

答案 3 :(得分:7)

对于任何使用VB.NET的人(以防万一)

Dim dv As DataView = yourDatatable.DefaultView

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

答案 4 :(得分:4)

最好使用DataView执行此任务。

您可以在此帖中找到使用它的示例:How to filter data in dataview

答案 5 :(得分:1)

有时您实际上想要返回DataTable而不是DataView。所以DataView在我的情况下并不好,我猜其他人也不会想要这样。这是我以前做的事情

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

这将过滤myDataTable这是一个DataTable并返回一个新的DataTable

希望有人会发现这很有用

答案 6 :(得分:0)

嗨我们可以使用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>();
   }