1

オブジェクトから上位 100 項目のみを取得したいと考えていDataTableます。メソッドを使用して一般的なリストでこれを行ったことTake()がありますが、なぜこれが利用できないのかわかりません。

以下は私のLINQクエリです:

    IEnumerable<DataRow> query = (from task in dtTasks.AsEnumerable()
                                  where  task.Field<DateTime>("EstimatedStartTimeStamp") <= DateTime.Parse(DateTime.Today.Date.AddDays(1).ToString("MM/dd/yyyy"))
                                 orderby task.Field<DateTime>("Status")
                                 select task);

    DataTable boundTable = query.CopyToDataTable<DataRow>();

問題は、Take() メソッドを使用しようとすると、インテリセンスに表示されないことです。OrderBy/OrderByDescending などの他のメソッドを示しています。


UPDATE : dtTasks はDataTableオブジェクトです。

御時間ありがとうございます!

4

3 に答える 3

2

アセンブリへの参照を追加しSystem.Data.DataSetExtensions、次の using ディレクティブがあることを確認してください。

using System.Linq;
using System.Data.Linq;

List<T>.AsEnumerableアセンブリSystem.Coreと名前空間の一部であることに注意する必要があります。

System.Linq を使用します。

一方、DataTable.AsEnumerableアセンブリ:System.Data.DataSetExtensionsおよび名前空間:の一部です。

using System.Data;

そして、いずれにせよ

.Take<int32>名前空間の一部です:

using System.Linq;
于 2013-06-09T04:13:11.903 に答える
1
var query = (from task in dtTasks.AsEnumerable()
             where  task.Field<DateTime>("EstimatedStartTimeStamp") <= DateTime.Parse(DateTime.Today.Date.AddDays(1).ToString("MM/dd/yyyy"))
             orderby task.Field<DateTime>("Status")
             select task).Take(3);

あなたのためにコンパイルしませんか?

への参照はありSystem.Data.DataSetExtensions.dllますか?

新しい Windows フォーム プロジェクトを作成しusing System.Data;、クラスの先頭に追加すると、次のコードが正常にコンパイルされます。

var dt = new DataTable();

var query = (from t in dt.AsEnumerable()
             select t).Take(1);

おそらく、クリーン/リビルドで修正されますか?

于 2013-06-09T03:28:17.727 に答える