【发布时间】:2020-10-16 08:50:31
【问题描述】:
我在代码中有一个类似于下面的 linq 查询
var results = Obj1.Obj2withinObj1.Icollection_Obj3withinObj2
.Where(s => s.obj4withinobj3.obj5withinobj4 != null)
.Select(s => s.obj4withinobj3.obj5withinobj4)
.SelectMany(s => s.IenumStringwithinobj5)
.Count();
这个查询执行得非常缓慢并且崩溃,我正在尝试修复。这确实从 sql server 返回了很多记录
问题 1.这查询 sql server 但这个 Entityframwork 或 Linqtosql 是什么。 2.代码的哪一部分运行在sql server上,哪一部分在内存中。 SelectMany 是否在内存中运行并在 sqlserver 上运行。再说一次,我自己怎么能说出来。 3. 我怎样才能使这个查询更快。数据库上的索引有帮助吗?
【问题讨论】:
-
这是一个无效的 LINQ 查询,所以没有帮助。最好检查生成的 SQL。
-
我正在使用 sql profiler 来查找它在后端运行的查询。它正在从所有基础表中运行一堆 Select 查询。但是我找不到一个包含所有连接的大选择语句。这可能吗?
-
如果它是 EF 6 - 这几乎是不可能的。检查经常使用哪些导航属性(表)并通过这些属性搜索查询。使用 EF Core,您可以标记所有复杂查询 docs.microsoft.com/uk-ua/ef/core/querying/tags
-
我对 Linq 做了一个小改动。 obj3 是 obj2 中的一个集合。现在我希望 linq 有意义?
-
我已经编辑了你的问题,现在更清楚了。
Obj1.Obj2withinObj1.Icollection_Obj3withinObj2这是什么?它是 IQueryable 吗?
标签: .net entity-framework linq