【发布时间】:2011-04-11 21:12:59
【问题描述】:
无论如何,我都不是 LINQ 高级用户,但可以在基本层面上摸索。我有一个关于 LINQ 如何制定它的查询“策略”的问题。我会尽力解释这一点,并通过记忆写一个非常愚蠢的例子。
我有一个包含多个数据库视图的数据模型。假设视图具有如下列结构:
人物视图
PersonViewId | Surname | GivenName | OtherViewId
------------------------------------------------
其他视图视图
OtherViewId | PersonViewId | Name
---------------------------------
在设置视图的主键 (PersonView.PersonViewId / OtherView.OtherViewId) 并将相应的字段设置为不可为空后,我创建了 PersonView.PersonViewId (Parent) 与 OtherView.PersonViewId (Child) 之间的关联。我将其设置为“一对一”并编写一些代码来使用它:
StringBuilder s = new StringBuilder();
foreach(PersonView p in dc.PersonViews)
{
s.AppendLine(p.OtherViews.Name + "<br />");
}
在注意到性能极差后,我分析了数据库并注意到它正在对 foreach 语句中的每个 PersonView 进行查询。
此时,我重写了查询并将 DBML 中的关联替换为 LINQ 查询中的 JOIN,分析了数据库并按预期查询了 DB,仅一次。
我认为这与实际上正在查询数据库有关,但不确定在哪里进行调试。有人可以为我指出正确的方向,以帮助我提高使用关联的性能,还是我坚持使用 JOIN 来完成我需要的事情?
谢谢:)
【问题讨论】:
-
您应该检查 LINQ 生成的代码。
标签: c# .net asp.net linq linq-to-sql