【发布时间】:2013-08-04 04:00:12
【问题描述】:
我有这个查询可以提供正确的结果,但运行大约需要 15 秒
int Count= P.Pets.Where(c => !P.Pets.Where(a => a.IsOwned == true)
.Select(a => a.OwnerName).Contains(c.OwnerName) && c.CreatedDate >=
EntityFunctions.AddDays(DateTime.Now, -8)).GroupBy(b=>b.OwnerName).Count();
如果我删除这部分 linq
'&& c.CreatedDate >= EntityFunctions.AddHours(DateTime.Now, -8)'
运行只需大约 3 秒。我怎样才能保持相同的情况发生但要快得多? 我需要该日期标准,因为我不希望将任何 8 天前创建的 Classeses 包含在计数中
编辑
我有一个名为 People 的表,在此查询中称为 P,我想返回没有所有者的 Pets 总数,并从查询中删除没有所有者的 Pets ' 没有所有者,即使它们存在于另一个 Pet 引用中也没有该 Pet 的所有者。这意味着如果一个人在 Pets 表中至少有一条记录被视为宠物的所有者,那么我想删除该人存在于返回查询中的所有情况,一旦完成,只返回已创建的 Pets超过 8 天
【问题讨论】:
-
如果您能从查询中解释您想要什么,那就太好了。它看起来过于嵌套和复杂。
-
查看正在执行的查询会很有帮助。你能用探查器拦截它吗?
-
@Keith 不知道该怎么做?
-
请解释查询需要返回什么。看起来它可以比这简单得多。
-
@jake 在您的数据库上放置一个分析器并拦截针对您的 LINQ 执行的查询
标签: c# sql linq-to-sql query-performance