我有一个场景,我有一个“批处理”表和一个“测试”表,其中“test”包含一个FK到“批处理”,许多测试可以属于一个批处理。
我希望能够选择多个批次并找到属于它们的所有测试。我这样做是通过为我感兴趣的批次生成一个PK列表,然后是以下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错误 无论找到多少测试,都在LINQ表达式上解析器堆栈溢出。
如果可能,我希望能够处理大量选择。我怎么能这样做?
答案 0 :(得分:1)
如果JeffN825的查询无法解决您的问题,我会给它做很高的赔率,您可能需要编译自己的SQLite并将-DYYSTACKDEPTH值设置为大于默认值的值。因此,您需要找出它的设置,然后可能加倍并从那里开始。您将传递的整行是CFLAGS="-DYYSTACKDEPTH=1000"
,将1000更改为您希望堆栈的深度。
答案 1 :(得分:0)
LINQ提供商可能正在爆炸,因为它试图为每个索引发出1个查询。您可以通过分析数据库并查看它是否实际为每个索引发出1个查询来验证这一点(如果SQL实际上已经生成了)。
请改为尝试:
var ret =
from t in tests
where indices.Contains(t.batch_id)
select t;