2017-01-05 3 views
1

Ich schreibe einen Test, um Anwendungsprotokolle zu prüfen, die in den Tausenden pro Minute nummerieren können. Ich möchte FindAsync verwenden, um die neuesten Protokolle abzurufen. Doch manchmal gibt es Brüche in dem Service, so dass Sie einen Zeitwert nicht genau:FindAsync, um die letzten 1000 Ergebnisse zurückzugeben

// may return many or none` 
context.FindAsync(x => x.Timestamp >= DateTime.Now.AddMinutes(-10)) 

Was ich will ist, etwas zu tun wie:

context.FindAsync(x => OrderByDescending(x.Timestamp).Take(1000)) 

Das Problem ist, dass, wenn FindAsync zu viele gibt Ergebnisse, könnte es andere Dienste und Threads verlangsamen. Gibt es eine Möglichkeit, mit FindAsync nur die letzten 1000 Zeilen zurückzugeben?

+0

Sie können versuchen, OrderByDesc-Methode. –

+0

context.OrderByDescrding (x => Zeitstempel) .Take (1000)? –

+0

Dies ist eine asynchrone Operation, es müsste ein OrderByDescAsync() - Aufruf sein, damit dies funktioniert. –

Antwort

5

Klingt für mich wie Sie es überdenken. In SQL würden Sie SELECT TOP 1000 und ORDER BY Timestamp DESC. Machen Sie das gleiche hier:

await context.Logs.OrderByDescending(x => x.Timestamp).Take(1000).ToListAsync(); 
+0

Ja, das ist eine Antwort. Aber nein, der Kontext, den ich anrufe, macht OrderByDescending() nicht verfügbar. –

+0

Was meinst du? 'FindAsync' kommt von' System.Data.Entity', 'OrderByDescending' kommt von' System.Linq'. Fragen Sie nicht ein 'DbSet '? Wenn nicht, dann sollten Sie explizit angegeben haben, was Ihr Kontext ist. – trashr0x

Verwandte Themen