2010-11-26 110 views
0

我有一個場景,我有一個「批」表和一個「測試」的表,其中「測試」包含FK「批」,並且許多測試可以屬於一批。LINQ堆棧溢出選擇許多

我希望能夠選擇多個批次並查找屬於他們的所有測試。

var ret = 
from t in tests 
from b in indices //indices is a list of long PK's belonging to selected batches 
where t.batch_id == b 
select t; 

它的工作原理,但是當我選擇大小超過14個批次,我得到一個「錯誤的SQLite分析器 :我通過生產的PK的列表,以我感興趣的批次,然後將下面的LINQ查詢做到這一點堆棧溢出「的LINQ表達式,無論發現多少測試。

我希望能夠在可能的情況下處理大量選擇。我怎樣才能做到這一點?

+2

有人將其標記爲LinqToSql。你可否確認?如果不是,請編輯標籤。此外 - 因爲你得到一個Sqlite錯誤,你介意發送發送到數據庫的SQL? (使用DataContext.Log = Console.Out,如果您使用LINQ to sql – 2010-11-26 05:52:43

回答

0

LINQ提供程序可能正在炸燬,因爲它試圖爲每個索引發出1個查詢。您可以通過分析數據庫並查看它是否實際上爲每個索引發出1個查詢來驗證這一點(如果SQL實際上正在生成)。

試試這個:

var ret = 
from t in tests 
where indices.Contains(t.batch_id) 
select t; 
1

如果JeffN825的查詢無法解決您的問題,我會給它做這麼高的賠率,你可能需要自己編譯SQLite和設置-DYYSTACKDEPTH值到比默認更大的東西。所以你需要找出它的設置,然後加倍並從那裏開始。你可以通過的全線是CFLAGS="-DYYSTACKDEPTH=1000",將1000改爲你想要堆棧的深度。