3

特定のクエリによって設定された ADO.NET データセットがあります。

SELECT ID,USER,PRODUCT,COUNT FROM PRODUCTION

where 句を使用せずに、データセットからいくつかの結果を導き出す必要があります。最大の製品数を持つユーザーのユーザーと製品の数を取得したいとします。(そして、既存のデータセットを使用してそれを行いたいのですが、データセットからこれを導出することはできません。)

データセット内でクエリを実行する方法はありますか? Datatables があるので、クエリを実行する方法があると思いました。

4

3 に答える 3

8

従来の SQL クエリは DataSet に適用できません。ただし、次のことが可能です。

  • を使用して行をフィルタリングしますDataTable.Select。DataTables の式の詳細については、こちらを参照してください。
  • を使用して合計などを計算しDataTable.Computeます。
  • これら 2 つで問題が解決しない場合は、常に LINQ が使用されます。

簡単な LINQ の例: (これは DataTable を返しませんが、匿名型を含むリストを返します):

var joinedResult = dataTable1
  // filtering:
  .Select("MyColumn = 'value'")
  // joining tables:
  .Join(
    dataTable2.AsEnumerable(), 
    row => row.Field<long>("PrimaryKeyField"), 
    row => row.Field<long?>("ForeignKeyField"),
    // selecting a custom result:
    (row1, row2) => new { AnotherColumn = row1.Field<string>("AnotherColumn") });

AsEnumerableIEnumerableDataTable を、 LINQ クエリを実行できる に変換します。LINQ を初めて使用する場合は、この概要を確認してください。

于 2011-03-31T05:48:30.790 に答える
2

はい、DataTable.Selectメソッドを使用できます。

DataTable table = DataSet1.Tables["Orders"];
    // Presuming the DataTable has a column named Date.
    string expression;
    expression = "Date > #1/1/00#";
    DataRow[] foundRows;

    // Use the Select method to find all rows matching the filter.
    foundRows = table.Select(expression);

    // Print column 0 of each returned row.
    for(int i = 0; i < foundRows.Length; i ++)
    {
        Console.WriteLine(foundRows[i][0]);
    }

このリンクも参照してください。

于 2011-03-31T05:10:06.860 に答える
0

LINQ to DataSet を使用して、Dataset オブジェクトのクロステーブル クエリを実行できます。

msdn.microsoft.com/en-us/library/bb386969.aspx

于 2012-10-12T17:30:11.160 に答える