
List View Threshold: What Still Works at 10,000 Items
Learn which SharePoint queries survive the 5,000 item list view threshold, with CAML joins, CSOM, REST, Graph and $batch measured on a 10,000 item list.
Joining SharePoint lists on lookup columns, whether CAMLEX still works on modern .NET, and getting past the list view threshold exception.
CAML is XML from another era and it is still the only way to ask SharePoint some questions. Not because the syntax is pleasant, but because a CAML join walks several lists connected by lookup columns, filters on a field two lists away, and merges the rows on the server. Nothing in the OData world does that.
Worth being precise about, because I used to be sloppy here: CAML is a query language, not a CSOM feature. SharePoint REST runs it too. The join executes either way, but GetItems hands the rows back with the projected columns quietly missing under a 200 OK, and RenderListDataAsStream doesn’t.
The posts here are about the parts that bite. Which column types a projected field refuses to carry. The <In> clause, capped at 500 values and quietly abandoning your index above 60. The 5,000 item list view threshold, if you arrived holding The attempted operation is prohibited because it exceeds the list view threshold. And whether CAMLEX still works on modern .NET, which it does: Camlex.Client.dll 5.4.3 against CSOM on .NET 10.
I write my CAML with CAMLEX rather than by hand, so the code here is C# lambdas with the generated XML next to it. When there are numbers, they come from real queries against real lists.

Learn which SharePoint queries survive the 5,000 item list view threshold, with CAML joins, CSOM, REST, Graph and $batch measured on a 10,000 item list.

Learn how a CAML join across SharePoint lists linked by lookup columns compares with separate queries, OData expands and Graph, measured on the same data.

Learn how to efficiently query multiple SharePoint lists using CAML joins instead of multiple API calls to avoid throttling
No posts match — try another search.