2

マップ上のプロット ポイントとして使用される 10000 のレコードを返すクエリがあります。負荷を軽減し、アプリの速度を上げるために、基本的に詳細レベルロジックに相当するものを実装しようとしています。基本的にズームアウト時は50%のポイントを表示します。ズームインすると、ポイントの 100% が表示されます。

最終的な SQL を次のようにする必要があります。

SELECT *
FROM 
    (SELECT 
        [t0].[RecordName], 
        [t0].[LastMaintenanceDate]
        ,Row_Number() OVER (ORDER BY [t0].Ticker) as RowNumber 
        FROM 
            [dbo].[TableName] AS [t0]
    )as [t1]
WHERE RowNumber % 2 = 0

LINQ では、.Skip と .Take を使用して Row_Number() Over 部分を取得できます (例 here ) が、これを行う場合、生成された Where 基準では、必要な "where RowNumber % 2 = 0" の代わりに 'between' が使用されます。 .

私はこれに正しく取り組んでいますか?ここで求めている完全なパフォーマンスの向上を得るには、SQL サーバーでこの除外を実際に行う必要があります。

4

2 に答える 2

0

morelinqプロジェクトにはこれを行うTakeEvery関数がありますが、これはIEnumerableでのみ機能します。

これを解決するための拡張メソッドを作成できるはずです(現在、開発環境を利用できないため、現在テストできません)。

あなたの特定の例では、Tableへの拡張メソッドで十分だと思います。

これを試してみたい場合は、ここにテーブルへの拡張メソッドを作成する「例」があります。

于 2009-10-07T22:00:30.247 に答える