我正在访问使用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之间,行将是唯一的,但随后又会弹出。它是否与视图有关?如果是这样,我该如何规避这个问题?
答案 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()或者提到的其他一个运算符。