2010-11-26 72 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改为你想要堆栈的深度。