1

我只想从DataTable对象中检索前 100 个项目。我以前在使用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。


更新: dtTasks 是一个DataTable对象。

谢谢你的时间!

4

3 回答 3

4

确保您在 WebUI 和域的参考中具有以下程序集(取决于您的系统设置方式)。

Assembly:  System.Core (in System.Core.dll)

Take然后在调用方法的控制器中拥有这个命名空间。

Namespace:  System.Linq
于 2013-06-09T04:09:42.203 回答
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);

也许 clean/rebuild 会为你解决这个问题?

于 2013-06-09T03:28:17.727 回答