0

MSDN で次のチュートリアルを見てきましたが、この方法をコードに適用できないようです。違いがわかりません。

この記事は、Creating a DataTable From a Query (LINQ to DataSet)にあり、特にコードは次のとおりです。

// Create a sequence. 
Item[] items = new Item[] { 
  new Book{Id = 1, Price = 13.50, Genre = "Comedy", Author = "Gustavo Achong"}, 
  new Book{Id = 2, Price = 8.50, Genre = "Drama", Author = "Jessie Zeng"},
  new Movie{Id = 1, Price = 22.99, Genre = "Comedy", Director = "Mary Barnes"},
  new Movie{Id = 1, Price = 13.40, Genre = "Action", Director = "Emmanuel Black"}
};

// Query for items with price greater than 9.99.
var query = from i in items
             where i.Price > 9.99
             orderby i.Price
             select i;

// Load the query results into new DataTable.
DataTable table = query.CopyToDataTable();

十分に単純に思えます。本と映画のサブクラスを持つオブジェクト配列は、CopyToDataTable が実行する DataRow に変換できるようです。

しかし、var に格納するオブジェクト配列では、CopyToDataTable メソッドを使用できません。私のオブジェクト「qryData」は上記の「アイテム」に非常に似ていると思いました....

var qryData =
    sdTable.AsEnumerable().Cast<DataRow>()
           .OrderByDescending(t => t[c.ColumnName] == DBNull.Value
                                    ? 0 : Convert.ToSingle(t[c.ColumnName]))
           .GroupBy(t => t["DAT_ID"])
           .Select(g => new {g, count = g.Count()})
           .SelectMany(x => x.g.Select(b => b)
                                .Zip(Enumerable.Range(1, x.count), (j, i) => new {
                                   inst = j["DAT_ID"],
                                   idn = j["ID_NUM"],
                                   val = j[c.ColumnName],
                                   tdt = dailyCount[Convert.ToInt32(j["DAT_ID"])],
                                   rn = i
                                 })
             );

クエリは正常に機能し、'(inst,idn,val,tdt,rn)' の大きなコレクションが返されますが、それに CopyToDataTable を使用できません。{メソッドは利用できません} .ToArray() または .AsEnumerable() を追加しても役に立ちません。

ご協力いただきありがとうございます!

編集:

簡単に言うと、.CopyToDataTable() メソッドが使用可能であると考えて、System.Data を含めました。System.Data.DataTableExtensions を含めようとしましたが、そこにはありません。次に、System.Data.DataSetExtensions を (.NET) 参照としてプロジェクトに含めようとしましたが、役に立ちませんでした。

4

1 に答える 1

0

この声明に基づいて:

ただし、その上で CopyToDataTable を使用することはできません。.ToArray() または .AsEnumerable() を追加しても役に立ちません。

using定義されている拡張メソッドを使用するには、適切なステートメントをコード ファイルの先頭に追加するだけですnamespace。したがって、namespace定義したクラスをチェックアウトし、usingそれを使用するコード ファイルの先頭に追加します。の。

于 2013-06-05T19:58:57.970 に答える