【问题标题】:Linq to Entities query hitting db twiceLinq to Entities 查询两次命中 db
【发布时间】:2009-10-08 15:36:33
【问题描述】:

我有以下非常简单的 linq 查询查询 linq 到实体 edmx。

(from i in ent.Inspectors select i).OrderBy(s => s.Surname).Skip((page - 1) * count).Take(count).ToList();

在 Sql Server Profiler 中,我可以看到完全相同的选择查询被发送了两次。

谁能解释一下原因?

干杯,

戴夫

【问题讨论】:

  • 你能确认你描述的那行代码没有被命中两次吗?
  • 您确定它实际上被发送了两次吗?默认情况下,SQL Profiler 将多次显示相同的查询。你能显示痕迹吗?
  • @Craig。答对了!谢谢回复。给出的跟踪不仅仅是粗略的一眼,我可以看到一个是 BatchStarting,另一个是 BatchCompleted。 .

标签: c# asp.net linq linq-to-entities sql-server-profiler


【解决方案1】:

ent.Inspectors 是包含两个项目的 IEnumerable 吗?

【讨论】:

    【解决方案2】:

    由于延迟执行,查询结果不会在本地缓存。为防止这种情况发生,请在查询中添加对 ToArray 的调用。

    另外,from i in ent.Inspectors select i 是无操作的;你应该写ent.Inspectors.OrderBy(s => s.Surname)...

    【讨论】:

    • 是的,但那是在最后。如果之前的方法之一没有被 L2E 翻译,它仍然可以命中两次。
    • 所有这些方法都是 L2E 已知的。除非有什么重要他没有告诉我们,否则应该只是一个查询。
    • 感谢您的回复。 @Slacks,关于替换 from i in 的好点...如果查询要继续获取所有内容,那么我会的,但这只是目前的起点。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多