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 以外の場合、次のエラーが発生します。

このプロバイダーは、クエリが単一テーブル (非結合) クエリであるか、Distinct、Except、Intersect、または Union (Concat ではない) である場合に、すべての ID 列を含むエンティティまたはプロジェクションを返す順序付きクエリに対してのみ Skip() をサポートします。手術。

DateCompleted と LineItemId の間で行が一意になると思いますが、これもポップアップします。これがビューであることと関係がありますか?もしそうなら、どうすればこの問題を回避できますか?

4

2 に答える 2

4

SQL Server 2000 には、Skip および Take 機能を実行するために Linq が回避しなければならない「配管」がいくつかありません。これにより、SQL Server 2000 でこれらの機能を使用できる条件が大幅に制限されます。

に ID 列が含まれて _context.OrderDetailsいること、およびエラー メッセージに示されている他のすべての条件を満たしていることを確認してください。

もちろん、いつでも SQL Server 2005 以降にアップグレードできます。:)

詳細はこちら: http://msdn.microsoft.com/en-us/library/bb386988.aspx

于 2009-11-17T19:48:22.380 に答える
2

OrderDetails テーブルに ID 列がない場合は、そこに .Distinct() を追加するか、言及されている他の演算子のいずれかを追加する必要があると私は信じています。

于 2009-11-17T19:41:36.300 に答える