I rozważa ten problem wcześniej dzisiaj, a najlepszym rozwiązaniem mogłoby myślę wykorzystuje następujący algorytm (przepraszam, brak kodu w tej chwili):
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
To zmniejszenie całkowitej liczby pozycji zwracanych znacznie, kosztem większej liczby zapytań.
Nie ma znaczenia, czy X jest całkowicie dokładne, ale losowość jest dość ważna. Zasadniczo pierwsza kwerenda prawdopodobnie zawiera najbardziej powszechne opcje, więc drugie zapytanie wyklucza je i prawdopodobnie zawiera kolejne najczęstsze opcje itd. Poprzez iteracje.
W najlepszym przypadku pierwsze zapytanie zawiera wszystkie opcje, a drugie zapytanie będzie puste. (X pozycji pobranych łącznie, ponad 2 zapytania)
W najgorszym przypadku (np. Zapytanie jest sortowane według szukanych opcji, a dla każdej opcji jest więcej niż X pozycji) zrobimy jako wiele zapytań, ponieważ są opcje. Zwracam łącznie około X * X elementów.
Chociaż ten został oznaczony jako odpowiedź, metoda ta polega na pobraniu nadal każdy element listy z bazy danych, a następnie * * znalezienie unikalne wartości. Wydaje mi się, że pytaniem, jak to zrobić w CAML, jest unikanie pobierania każdego elementu z bazy danych ... – MgSam
Zgadzam się z MgSam, ponieważ CAML nie jest prawdziwym zamiennikiem rzeczywistego języka zapytań takiego jak SQL. To jest tak dobre, jak to tylko możliwe. Ta odpowiedź przesuwa rozmowę do przodu. +1 ode mnie. –