J'ai une requête qui renvoie 10000 d'enregistrements qui sont utilisés comme points de tracé sur une carte. Dans un effort pour réduire la charge, et augmenter la vitesse de l'application, nous essayons de mettre en œuvre ce qui revient essentiellement à la logique Level of Detail. Fondamentalement, en zoom arrière, afficher 50% des points. Lorsque vous effectuez un zoom avant, affichez 100% des points.Renvoyer tous les autres enregistrements avec LINQ
C'est en fin de compte ce que je dois le SQL final à ressembler à:
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
En LINQ je peux utiliser .Skip et .Take pour obtenir le ROW_NUMBER() sur une partie (example here), mais quand vous le faites , le critère Where génère utilise 'between' au lieu de 'where RowNumber% 2 = 0' dont j'ai besoin.
Est-ce que je m'approche de cela correctement? Afin d'obtenir les gains de performances complets que nous recherchons ici, cette exclusion doit vraiment se produire sur le serveur SQL.
Ceci est un problème très intéressant, et malheureusement je ne connais pas la réponse en utilisant LINQ to SQL pur. La seule chose que je peux suggérer est que LINQ to SQL * supporte * ad-hoc [requêtes SQL brutes] (http://msdn.microsoft.com/en-us/library/bb399403.aspx). Votre problème peut être un cas valide pour ce faire. – Randolpho