我正在使用LINQ和LINQKit在C#中編寫應用程序。我有一個非常大的數據庫表,裏面有公司註冊號。使用謂詞構建器的LinqKit堆棧溢出異常
我想要做一個LINQ查詢,它將產生等效的SQL: select * from table1 where'123','456''in'子句中可能有數千個術語。
首先我從國家等領域獲得公司註冊號碼。
我那麼所有的公司註冊號碼添加到謂詞:
var predicate = PredicateExtensions.False<table2>();
if (RegNos != null)
{
foreach (int searchTerm in RegNos)
{
int temp = searchTerm;
predicate = predicate.Or(ec => ec.regno.Equals(temp));
}
}
在Windows Vista專業版加4063項條款後堆棧溢出異常發生。在Windows Server 2003上添加了大約1000個術語後發生堆棧溢出異常。我不得不快速解決這個問題的演示。
爲了解決我用這個符號的問題:
var predicate = PredicateExtensions.False<table2>();
if (RegNos != null)
{
predicate = predicate.Or(ec => RegNos.Contains(ec.regno));
}
我的問題是:
爲什麼一個堆棧溢出發生使用foreach循環?
我認爲Windows Server 2003的每個進程\線程比NT \ 2000 \ XP \ Vista \ Windows 7工作站版本的Windows要小得多。
哪個是使用LINQ和LINQKit實現這個最快和最正確的方法?
有人建議我停止使用LINQ,回到動態SQL或ADO.NET,但我想使用LINQ和LINQKit是更好的可維護性。