web-dev-qa-db-ja.com

データテーブルをフィルタリングするにはどうすればよいですか?

ユーザーに関する情報を含む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; 
        }
65
Tarasov

DataViewを使用できます。

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


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

101
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拡張メソッドにSystem.Data.DataSetExtensions dllへの参照を追加することを忘れないでください( How )。

89
Tim Schmelter

明確:

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"
7
nghiavt

このタスクにはDataViewを使用することをお勧めします。

この投稿で使用できる例: dataviewでデータをフィルターする方法

4
Maxim Kornilov

DataTableよりもDataViewを実際に返したい場合があります。私の場合、DataViewは良くありませんでした。これが私が以前にしたことです

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

これにより、DataTableであるmyDataTableがフィルタリングされ、新しい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