estaba considerando este problema el día de hoy, y la mejor solución que se me ocurrió utiliza el siguiente algoritmo (lo siento, no hay código en el 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
Esto reduciría el número total de artículos devueltos significativamente, a costa de hacer más consultas.
No importa mucho si X es completamente preciso, pero la aleatoriedad es bastante importante. Esencialmente, la primera consulta probablemente incluya las opciones más comunes, por lo que la segunda consulta las excluirá y es probable que incluya las siguientes opciones más comunes, y así sucesivamente a través de las iteraciones.
En el mejor de los casos, la primera consulta incluye todas las opciones, luego la segunda consulta estará vacía. (X elementos recuperados en total, más de 2 consultas)
En el peor de los casos (por ejemplo, la búsqueda está ordenada por las opciones que estamos buscando, y hay más de X elementos con cada opción) haremos como muchas consultas ya que hay opciones. Devolviendo aproximadamente X * X artículos en total.
pesar de que este fue marcada como la respuesta, este método todavía se basa en la recuperación de cada elemento de la lista de la base de datos y luego * * la búsqueda de los valores únicos. Creo que todo el punto de preguntar cómo hacerlo en CAML es evitar la recuperación de todos los elementos de la base de datos ... – MgSam
Estoy de acuerdo con MgSam, sin embargo, como CAML no es un verdadero sustituto de un lenguaje de consulta real como SQL. Esto es tan bueno como se pone. Y esta respuesta mueve la conversación hacia adelante. +1 de mi parte –