2

我正在访问使用 LINQ to SQL 自动生成的数据上下文对象。SQL 数据库是一个 SQL Server 2000 机器。我正在使用的类是 SQL 视图。我有一个类似的声明:

query = _context.OrderDetails
    .Where(w => w.Product == "TEST")
    .OrderBy(o => o.DateCompleted)
    .ThenBy(t => t.LineItemId)
    .Skip(startRowIndex) 
    .Take(maximumRows);

但是,当 Skip 的值不是 0 时,我会收到此错误:

此提供程序仅在返回实体或包含所有标识列的投影的有序查询上支持 Skip(),其中查询是单表(非连接)查询,或者是 Distinct、Except、Intersect 或 Union(非 Concat)手术。

我认为在 DateCompleted 和 LineItemId 之间,行将是唯一的,但随后又会弹出。它与这是一种观点有关吗?如果是这样,我该如何规避这个问题?

4

2 回答 2

4

SQL Server 2000 有一些缺失的“管道”,Linq 必须绕过这些管道才能执行 Skip 和 Take 功能。这极大地限制了您可以在 SQL Server 2000 中使用这些函数的条件。

确保您在 中包含 Identity 列 _context.OrderDetails,并且您满足错误消息中所述的所有其他条件。

当然,您始终可以升级到 SQL Server 2005 或更高版本。:)

更多信息在这里:http: //msdn.microsoft.com/en-us/library/bb386988.aspx

于 2009-11-17T19:48:22.380 回答
2

我相信它所说的是,如果您在 OrderDetails 表上没有标识列,那么您需要在其中添加 .Distinct() 或提到的其他运算符之一。

于 2009-11-17T19:41:36.300 回答