簡體   English   中英

如何過濾數據表?

[英]How I can filter a Datatable?

我使用帶有用戶信息的 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; 
        }

您可以使用數據視圖。

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


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

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

用它:

.CopyToDataTable()

例子:

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

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

有時您實際上想要返回DataTable而不是DataView 所以在我的情況下, DataView並不好,我想很少有人會想要它。 這是我以前做的

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

這將過濾作為 DataTable 的myDataTable並返回一個新的DataTable

希望有人會發現這很有用

對於在 VB.NET 中工作的任何人(以防萬一)

Dim dv As DataView = yourDatatable.DefaultView

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

最好使用 DataView 來完成此任務。

您可以在這篇文章中找到使用它的示例: 如何在數據視圖中過濾數據

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM