LINQ,Skip,OrderBy和SQL Server 2000

时间:2009-11-17 19:37:28

标签: sql linq sql-server-2000 sql-order-by skip

我正在访问使用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,或联盟(不是康卡特)的行动。

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

2 个答案:

答案 0 :(得分:4)

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

确保您在_context.OrderDetails中包含标识列,并且您正在履行错误消息中所述的所有其他条件。

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

此处有更多信息:http://msdn.microsoft.com/en-us/library/bb386988.aspx

答案 1 :(得分:2)

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