Tôi đã xem xét vấn đề này trước ngày hôm nay, và là giải pháp tốt nhất mà tôi có thể nghĩ đến sử dụng thuật toán sau đây (xin lỗi, không có mã số vào lúc này):
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
này sẽ làm giảm tổng số các mặt hàng trở lại đáng kể, với chi phí tạo nhiều truy vấn hơn.
Nó không quan trọng nếu X là hoàn toàn chính xác, nhưng sự ngẫu nhiên là khá quan trọng. Về cơ bản, truy vấn đầu tiên có khả năng bao gồm các tùy chọn phổ biến nhất, do đó truy vấn thứ hai sẽ loại trừ các truy vấn này và có khả năng bao gồm các tùy chọn phổ biến nhất tiếp theo, v.v ... qua các lần lặp.
Trong trường hợp tốt nhất, truy vấn đầu tiên bao gồm tất cả các tùy chọn, khi đó truy vấn thứ hai sẽ trống. (X mục được truy xuất tổng cộng, hơn 2 truy vấn)
Trong trường hợp xấu nhất (ví dụ: truy vấn được sắp xếp theo các tùy chọn mà chúng tôi đang tìm kiếm và có nhiều hơn X mục với mỗi tùy chọn), chúng tôi sẽ thực hiện nhiều truy vấn như có các tùy chọn. Trả về tổng số X * X mục.
Nguồn
2012-11-23 21:08:01
Mặc dù điều này đã được đánh dấu là câu trả lời, phương pháp này vẫn dựa vào lấy mỗi mục trong danh sách từ cơ sở dữ liệu và sau đó * * tìm kiếm những giá trị độc đáo. Tôi nghĩ rằng toàn bộ vấn đề yêu cầu làm thế nào để thực hiện nó trong CAML là tránh lấy mọi mục từ cơ sở dữ liệu ... – MgSam
Tôi đồng ý với MgSam, vì CAML không thực sự thay thế cho ngôn ngữ truy vấn thực tế như SQL. Điều này là tốt như nó được. Và câu trả lời này sẽ chuyển cuộc hội thoại về phía trước. +1 từ tôi. –