from f in CUSTOMERS
where depts.Contains(f.DEPT_ID)
select f.NAME
depts
jest lista (IEnumerable<int>
) identyfikatorów towarowychBicie 2100 graniczną parametr (SQL Server) przy użyciu Zawiera()
Ta kwerenda działa dobrze, dopóki nie przejdą dużą listę (powiedzmy około 3000 dept identyfikatorów) .. następnie uzyskać ten błąd:
The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Too many parameters were provided in this RPC request. The maximum is 2100.
zmieniłem maila do:
var dept_ids = string.Join(" ", depts.ToStringArray());
from f in CUSTOMERS
where dept_ids.IndexOf(Convert.ToString(f.DEPT_id)) != -1
select f.NAME
przy użyciu IndexOf()
naprawił błąd, ale spowolnił kwerendę. Czy istnieje inny sposób rozwiązania tego problemu? Dzięki wielkie.
Jak o [jak tak] (http://stackoverflow.com/questions/567963/linq-expression-to-return-property-value/568771#568771) (który dozuje go w łatwe do opanowania części).Pozostałe (inne niż LINQ) opcje obejmują CSV i "split" UDF oraz parametry wycenione w tabeli (w SQL2008). –
Mark, czy możesz wyjaśnić, jaka jest najlepsza alternatywa dla "zawierać", jeśli mam różne parametry od 1 do 2000? Wiem, że to tworzy garść planów w db, ale wydaje się, że użycie 'jak '% %'' zajmie jeszcze więcej czasu zasobów db. Co powinienem użyć? –
Problem z limitem 2100 parametrów nie istnieje w Entity Framework: http://stackoverflow.com/questions/8898564/entity-framework-hitting-2100-parameter-limit – nmit026