Stavo considerando questo problema prima di oggi, e la soluzione migliore che potevo pensare utilizza il seguente algoritmo (mi dispiace, nessun codice al momento):
L is a list of known values (starts populated with the static Choice options when querying fill-in options, for example)
X is approximately the number of possible options
1. Create a query that excludes the items in L
1. Use the query to fetch X items from list (ordered as randomly as possible)
2. Add unique items to L
3. Repeat 1 - 3 until number of fetched items < X
Ciò ridurrebbe il numero totale di elementi restituiti significativamente, al costo di fare più domande.
Non importa se X è completamente preciso, ma la casualità è molto importante. In sostanza, è probabile che la prima query includa le opzioni più comuni, quindi la seconda query le escluderà ed è probabile che includa le prossime opzioni più comuni e così via attraverso le iterazioni.
Nel migliore dei casi, la prima query include tutte le opzioni, quindi la seconda query sarà vuota. (X elementi recuperati in totale, oltre 2 query)
Nel peggiore dei casi (ad esempio, la query è ordinata dalle opzioni che stiamo cercando e ci sono più di X elementi con ciascuna opzione) faremo come molte domande quante sono le opzioni. Restituzione di circa X * X elementi in totale.
fonte
2012-11-23 21:08:01
Anche se questo è stato contrassegnato come la risposta, questo metodo si basa ancora sul recupero di ogni elemento della lista dal database e * poi * trovare i valori univoci. Penso che l'intero punto di chiedere come farlo in CAML è di evitare di recuperare ogni elemento dal database ... – MgSam
Sono d'accordo con MgSam, tuttavia, poiché CAML non è un vero sostituto di un vero linguaggio di query come SQL. Questo è buono come si arriva. E questa risposta sposta la conversazione in avanti. +1 da me. –