2015-08-26 28 views
6

Si supponga qualcosa come un'espressione nidificatoMongo C# conducente - Filtro Costruire in modo dinamico con nidificazione

dove a = 1, (b = 4 oppure b = 5)

come utilizzare più oggetti Builders e costruire un filtro completo da una tale espressione?

+0

È questo un problema C# correlati ? Vuoi creare un'espressione in modo dinamico? – Hristo

+0

Mi dispiace mantenere la domanda incompleta. Sì, utilizza le classi Builder del driver C# 2.0. Sì, voglio creare l'espressione in FilterDefinition in modo dinamico. – Mr767267

risposta

23

Builders è operatori di classe molto flessibile, ma ha anche ha ignorato "& = E" e "| = O"

Il vostro esempio sarà

var filter = Builders<User>.Filter.Eq(x => x.A, "1"); 
filter = filter & (Builders<User>.Filter.Eq(x => x.B, "4") | Builders<User>.Filter.Eq(x => x.B, "5")); 
+0

Grazie! Proverò a usare questo approccio. La parte difficile sarà l'analisi dell'espressione basata su stringhe e la costruzione della FilterDefinition nidificata. Perché quando analizzo la stringa in oggetti filtro, andrò da sinistra a destra e dovrò iniziare con la maggior parte del builder esterno e poi navigare verso i builder figlio ... potrebbe essere che ho bisogno di una struttura dati ad albero – Mr767267

+0

risposta migliore .. congratulazioni! ! –

+0

avrai sicuramente bisogno di costruire un albero per farlo correttamente. Sembra un progetto divertente –