Verifica se un Linq IQueryable ha un ordine applicato

c# expression-trees linq

Domanda

C'è un modo per scoprire se un oggetto IQueryable ha un OrderBy applicato all'interno del suo albero delle espressioni?

Lo scenario che ho è che un controllo di griglia ha abilitato il paging e l'ordinamento per colonna. Tuttavia non esiste un ordinamento applicato per impostazione predefinita, quindi in questo caso da Linq a SQL viene eseguita una selezione orribile per il conteggio delle righe, quindi in tutti gli scenari è necessario fornire un ordine, tuttavia dovrei applicare un ordine predefinito per chiave primaria se non è stato specificato nessun altro ordine.

Quindi è possibile?

Risposta accettata

Puoi scoprirlo ispezionando l'albero delle espressioni della query utilizzando un ExpressionVisitor personalizzato o qualsiasi meccanismo di attraversamento ricorsivo a tua scelta.

Sento che il tuo codice non è ben progettato. Probabilmente dovresti semplicemente ricordare che l'ordine è stato applicato da qualche parte come un bool . Forse il flusso di informazioni della tua app deve essere rearchitected.

Con questo approccio di ispezione si stanno recuperando queste informazioni in modo hacker.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché