5

DataTable として表されるこの DataTable のサブセットを取得したい大きな DataTable があります。DataTable で特定の列を選択する方法を簡単に説明します。

私はこのようなことを試みていましたが、うまくいきません...

DataTable dTable = new DataTable();
...
...
...
        DataTable dt = from field in dTable
                       where field.Field<string>("Manager")
                       where field.Field<string>("Phone")
                       select field;

私のコードが間違っているのかもしれません。ループせずに、ある DataTable から別の DataTable に "manager" 列と "Phone" 列を取得するにはどうすればよいでしょうか?

4

3 に答える 3

5

DataTableExtensions を参照します -

http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable.aspx

それで...

var whatever = dTable.AsEnumerable();

次に、MSDNの例に従って...

var productNames = from products in table.AsEnumerable() 
      select products.Field<string>("ProductName");

編集/更新: 残念ながら、別のスキーマを持つ DataTable への組み込みの直接キャストはないと思います。DataTable を使用する必要があります? 私はそれを信じています...コードをリファクタリングしてテストするのは大変な労力になるかもしれません. 頑張って、強く型付けされたリストを操作する方がはるかに楽しいので、お知らせを続けてください。

于 2012-04-30T10:52:53.113 に答える
2

あなたは書くことができます:

  var query = from row in dTable.AsEnumerable()
      select new
      {
         manager = row.Field<string>("Manager"),
         phone = row.Field<string>("Phone")                         
      };
于 2012-04-30T10:56:20.900 に答える
1

AsEnumerable を使用して、DataTable または DataSet の特定のテーブルで LINQ クエリを実行できます。

これは参考になるかもしれない例です。

    DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    DataColumn dc;
    DataRow dr;
    ds.DataSetName = "products";
    dt.TableName = "product";

    dc = new DataColumn("product_id",long.MaxValue.GetType());
    dt.Columns.Add(dc);

    dc = new DataColumn("product_name");
    dt.Columns.Add(dc);

    dr = dt.NewRow();
    dr["product_id"] = 1;
    dr["product_name"] = "Monitor";
    dt.Rows.Add(dr);

    dr = dt.NewRow();
    dr["product_id"] = 2;
    dr["product_name"] = "Mouse";
    dt.Rows.Add(dr);

    dr = dt.NewRow();
    dr["product_id"] = 3;
    dr["product_name"] = "KeyBoard";
    dt.Rows.Add(dr);

    dr = dt.NewRow();
    dr["product_id"] = 4;
    dr["product_name"] = "LCD";
    dt.Rows.Add(dr);

    ds.Tables.Add(dt);

    IEnumerable<DataRow> objResult1 = from tbl in dt.AsEnumerable()
                                   where tbl.Field<long>(0) <= 2
                                   select tbl;

    Response.Write("<b>Query Results 1</b>");
    foreach (DataRow row in objResult1)
    {
        Response.Write(string.Format("<br/>Product ID: {0} ,  Product Name: {1}", row.Field<long>(0), row.Field<string>(1)));
    }

    IEnumerable<DataRow> objResult2 = from tbl in ds.Tables[0].AsEnumerable()
                                   let product_name = tbl.Field<string>(1)
                                   where product_name.StartsWith("Key")
                                   || product_name.StartsWith("Mo")
                                   select tbl;

    Response.Write("<br/><br/><b>Query Results 2</b>");
    foreach (DataRow row in objResult2)
    {
        Response.Write(string.Format("<br/>Product ID: {0} ,  Product Name: {1}", row.Field<long>(0), row.Field<string>(1)));
    }
于 2012-07-11T10:38:55.460 に答える