我需要哪个LINQ表达式,没有循环?

时间:2011-11-18 08:54:48

标签: c# asp.net linq-to-sql


我有一个LINQ to SQL的MSSQL数据库 我有三张桌子 Requests -> id, string name
Results -> id, requestID, int jumps
Places -> id, resultID, int location

然后,使用输入string,我需要获得符合以下条件的 ICollectable 数组Place的内容:
每个Request name = input,取其ID。[您只能假设一个] 每个Result requestID = ID[from above] - 取id 每个Place resultID='id [from above]' - 附加到数组进行进一步处理。

我是通过循环所有Results然后执行另一个LINQ语句来实现的,但它的速度非常慢[单个请求约为500毫秒!]。 我可以加快速度吗?

谢谢!

编辑:糟糕,我还需要按结果分组。也就是地方列表列表,而每个内部列表包含Result中的一列。

2 个答案:

答案 0 :(得分:3)

您可以使用join关键字在Linq2Sql中执行表连接:

var places = from request in Requests 
             join result in Results on request.Id equals result.requestID
             join place in Places on result.Id equals place.ResultId
             where request.name = input
             select place;

答案 1 :(得分:2)

这样的东西
Requests.Where(r => r.name == input).Results.Places.Select();

如果这个太慢,我希望你的数据库需要一些索引。

如果您的模型中没有关系,那么您需要在表上建立一些外键约束来重建模型。