2011-11-18 62 views
0


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

然后,使用输入string,我需要获得一个ICollectable阵列Place东西满足下列:
每个Request具有name = input,取其ID为[你可以假设只有一个]
每个ResultrequestID = ID[from above] - 取其id
每个Place具有resultID='id [from above]' - 附加到数组以供进一步处理。

我需要使用哪种LINQ表达式,无需循环?

我通过循环对所有Results,然后执行另一个LINQ言言,但其速度极慢[500ms左右对单个请求!]。 我可以更快吗?

谢谢!

编辑:哎呀,我也需要它按结果分组。 aka列表的地方名单,而每个内部列表包含从Result一列。

+1

你会如何写SQL此查询? (提示:它涉及连接)。无论好坏,LINQ都与SQL DQL非常接近,所以从这种方法来看待它可能会有所启发。 – 2011-11-18 08:57:34

+2

[基本的LINQ查询操作](http://msdn.microsoft.com/en-us/library/bb397927.aspx) – Magnus

回答

3

可以进行表连接:

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; 
+0

OP希望'name'匹配'input',而不是'id' – Jodrell

+0

I也需要按“结果”进行分组。 –

2

财产以后像

Requests.Where(r => r.name == input).Results.Places.Select(); 

如果这是太慢了,然后我希望你需要你的数据库上的一些指标。

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