我有一個很大的表,我想通過Id獲取特定的行。爲了保存數據,我需要發送一個ID列表,可以多達幾千個。我試過用commaseperated字符串將id發送到存儲過程,但是將字符串轉換回可選列表花了幾分鐘。 現在我已經嘗試過在視圖上使用Contains,但是我總是遇到錯誤,我使用了太多的參數。如何將LINQ中的大型過濾列表發送到SQL
是否有解決我的問題的最佳實踐方法?在此先感謝 - 希望你明白我的意思。
我有一個很大的表,我想通過Id獲取特定的行。爲了保存數據,我需要發送一個ID列表,可以多達幾千個。我試過用commaseperated字符串將id發送到存儲過程,但是將字符串轉換回可選列表花了幾分鐘。 現在我已經嘗試過在視圖上使用Contains,但是我總是遇到錯誤,我使用了太多的參數。如何將LINQ中的大型過濾列表發送到SQL
是否有解決我的問題的最佳實踐方法?在此先感謝 - 希望你明白我的意思。
使用直接的C#和SQL,可以使用表值參數 - 這是將內存表傳遞給存儲過程的一種方法。
http://msdn.microsoft.com/en-us/library/bb675163.aspx
我不相信的LINQ支持它。但是,我發現這篇文章通過LINQ的臺灣居民入境許可證使用與解決方法有關(還沒有嘗試過):
http://blog.mikecouturier.com/2010/01/sql-2008-tvp-table-valued-parameters.html
希望有所幫助。
從Hitting the 2100 parameter limit (SQL Server) when using Contains()
如何like so(該批處理成可管理的部分)。其他(非LINQ)選項涉及CSV和「拆分」UDF,以及 表值參數(在SQL2008中)。
請在發帖之前在SO上搜索。
用'Contains'顯示你的代碼 – Oybek 2012-02-06 12:58:26
在linq中不能確定,但用C#和直接sql,你可能想看看TVPs(表值參數)。這是一種將內存表發送到sproc的方法。 – bryanmac 2012-02-06 12:59:04