我想从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()方法时,它只是不会出现在intellisense中。它显示了其他方法,如OrderBy / OrderByDescending。
更新 :dtTasks是DataTable
个对象。
谢谢你的时间!
答案 0 :(得分:4)
确保您在WebUI和域的参考中有下面的程序集(取决于您的系统设置方式)。
Assembly: System.Core (in System.Core.dll)
然后在控制器中使用此命名空间,调用Take
方法。
Namespace: System.Linq
答案 1 :(得分:2)
请确保您已添加对程序集System.Data.DataSetExtensions
的引用,并使用以下指令:
using System.Linq;
using System.Data.Linq;
必须注意List<T>.AsEnumerable
是程序集System.Core
和命名空间的一部分:
使用System.Linq;
while,DataTable.AsEnumerable
是汇编的一部分:System.Data.DataSetExtensions
和命名空间:
using System.Data;
,无论如何
.Take<int32>
是命名空间的一部分:
using System.Linq;
答案 2 :(得分: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);
也许干净/重建会为你解决?