[英]How to construct a raw SQL Query in EF Core with dynamic number of parameters
[英]maximum number of parameters in sql query
有一段時間我會嘗試使用LINQ。 枚舉集合並在我的代碼中更改其某些屬性的典型方法如下所示:
ATDataContext dc = new ATDataContext(Settings.connection_string);
int[] col = ListViewClass.getListViewSelectedPositionTags(listView);
try
{
foreach (var item in col)
{
var ctx = (from r in dc.MailingLists
where r.ID == item
select r).Single();
ctx.Excluded = 'Y';
ctx.ExcludedComments = reason;
}
dc.SubmitChanges();
}
有一段時間有一個建議來做到這一點...似乎更聰明的方式:
var ctx = from r in dc.MailingLists
where col.Contains(r.ID)
select r;
foreach (var item in ctx)
{
item.Excluded = 'Y';
item.ExcludedComments = reason;
}
dc.SubmitChanges();
Iit在很多層面上都很有意義,我喜歡這個解決方案。 它比第一個更聰明,更快捷。
我已經在生產環境中使用了這個解決方案一段時間了。
幾周后,我在搜索應用程序日志文件時看到了什么,並看到了這一點:
“傳入的表格數據流(TDS)遠程過程調用(RPC)協議流不正確。此RCP請求中提供的參數太多。最大值為2100.”
LINQ to SQL將where col.Contains(r.ID)
轉換為IN
子句,如下所示:
ID IN(@ p1,@ p1,@ p2 ......)
col
集合達到(在我的情況下)超過2100個元素,並且查詢無法執行。 我已經對這個問題做了一些研究,最后我得到了:
“... sql查詢中的最大參數數量是2100.還有更多限制,例如整個查詢字符串不能超過8044個字符。”
我非常喜歡第二種解決方案。 我對SQL Server的這些硬編碼限制感到非常失望。
我錯過了什么? 我能做些什么來使用“where col.Contains(r.ID)”版本?
關心馬里烏斯
PS。 (我使用Win XP,C#with LINQ和SQL 2005 Express)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.