我有LINQ查詢返回以下錯誤: 「傳入的表格數據流(TDS)遠程過程調用(RPC)協議流不正確。在此提供的參數太多RPC請求,最大值爲2100「。將大整數列入LINQ查詢
我所需要的是計算所有有BirthDate的客戶,我有他們的ID在列表中。 我的客戶端ID列表可能很大(數百萬條記錄)。
下面是該查詢:
List<int> allClients = GetClientIDs();
int total = context.Clients.Where(x => allClients.Contains(x.ClientID) && x.BirthDate != null).Count();
當查詢重寫這樣,
int total = context
.Clients
.Count(x => allClients.Contains(x.ClientID) && x.BirthDate != null);
它會導致同樣的錯誤。
還試圖使它在不同的方式,它吃掉所有內存:
List<int> allClients = GetClientIDs();
total = (from x in allClients.AsQueryable()
join y in context.Clients
on x equals y.ClientID
where y.BirthDate != null
select x).Count();
GetClientIDs從哪裏獲取數據?如果它從數據庫中拉出來,你可能想把它合併到你的查詢中,而不是把所有的id都用在單獨的查詢中。 – juharr
我認爲這是不可能的。 'allClients.Contains(x.ClientID)'強制查詢在本地工作。 –
@HamletHakobyan否,'allClients'可以是包含linq-to-sql查詢的'IQueryable'。如果是這樣,它將在'total'查詢中作爲SQL合併。 –