c# - LINQ 执行多个查询而不是单个 "joined"查询

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

无论如何,我都不是 LINQ 高级用户,但可以在基本级别上摸索。我有一个关于 LINQ 如何制定它的查询“策略”的问题。我将尽力解释这一点,并根据内存编写一个极其简单的示例。

我有一个包含多个数据库 View 的数据模型。假设 View 具有如下列结构:

人物 View

PersonViewId | Surname | GivenName | OtherViewId
------------------------------------------------

其他 View View

OtherViewId | PersonViewId | Name
---------------------------------

在设置 View 的主键 (PersonView.PersonViewId/OtherView.OtherViewId) 并将适当的字段设置为不可为空后,我在 PersonView.PersonViewId(父级)与 OtherView.PersonViewId(子级)之间创建关联。我将它设置为“一对一”并编写一些代码来使用它:

StringBuilder s = new StringBuilder();
foreach(PersonView p in dc.PersonViews)
{
    s.AppendLine(p.OtherViews.Name + "<br />");
}

在注意到性能极差之后,我分析了数据库并注意到它正在为 foreach 语句中的每个 PersonView 执行查询。

此时我重写了查询并将 DBML 中的关联替换为 LINQ 查询中的 JOIN,分析了数据库并按预期查询了数据库,仅一次。

我认为这与实际查询数据库有关,但我不确定在哪里调试它。有人可以指出正确的方向来帮助我提高使用关联的性能,还是我坚持使用 JOIN 来完成我需要的?

谢谢:)

最佳答案

这是由延迟加载引起的 - 您可以通过应用 LoadWith() 来解决这个问题(相当于 EF 的 Include() 用于 Linq to SQL),然后执行您的查询:

var dlo = new DataLoadOptions();
dlo.LoadWith<PersonView>(p => p.OtherViews);
dc.LoadOptions = dlo;
//your query here

关于c# - LINQ 执行多个查询而不是单个 "joined"查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5627627/

相关文章:

c# - 如何从 App.config 中读取这个自定义配置?

c# - 如何将脚本错误对话框确认到 WebBrowser 中?

.net - WebReference 即使在库程序集项目中也会创建 App.config

c# - 重写 System.Web.Security.Roles 函数?

c# - 如何在 Realm-dotnet 中存储 System.Collections.Generic.Dictionary

c# - 实现 OpenID : identifying users

c# - 使用 EF CodeFirst 和 DRY 原则进行重复验证

asp.net - 如何禁用 .NET 事件日志警告?

c# - 为什么@User.IsInRole在_Layout.cshtml中总是返回false

c# - 在后面的代码中应用 Grid Star Size