扩展方法(如 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对象。

谢谢你的时间!

扩展方法(如 Take())不适用于 LINQ 查询,任何原因

确保在

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);

也许清洁/重建会为您修复它?