扩展方法(如 Take())不适用于 LINQ 查询,任何原因
本文关键字:查询 任何原 LINQ 不适用 方法 Take 扩展 适用于 | 更新日期: 2023-09-27 18:17:38
我只想从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
对象。
谢谢你的时间!
确保在
WebUI和域的参考中都有以下程序集(取决于您的系统设置方式(。
Assembly: System.Core (in System.Core.dll)
然后将此命名空间放在调用该方法Take
控制器中。
Namespace: System.Linq
请确保已添加对汇编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;
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);
也许清洁/重建会为您修复它?