【问题标题】:Query Execution of SP while using it in LINQ to SQL在 LINQ to SQL 中使用 SP 时查询执行
【发布时间】:2012-01-14 17:16:27
【问题描述】:

我有一个返回结果集的查询。我想对结果集应用过滤器和排序。 有人可以帮我理解如果我在 LINQ 中使用查询(我使用的是 EF 4.0),我能否获得延迟执行,以便当我在实体模型中应用过滤器/排序时,执行只发生一次(延迟)

提前致谢!

问候, 巴维克

【问题讨论】:

  • 你调用存储过程吗?
  • 从头开始 - 是的。此外,说您在 EF 中使用 LINQ to SQL 也是不正确的。当您查询 ObjectContext 时 - 您正在使用 LINQ to Entities。请添加代码以澄清问题。
  • 感谢@anatoliiG 的纠正。詹姆斯的回答解决了我的问题。感谢您的帮助

标签: c# linq linq-to-sql entity-framework-4


【解决方案1】:

如果查询不带参数,那么可以,因为您可以创建一个调用该存储过程的视图,在模型中公开该视图,然后对其进行查询。

如果它需要参数,那么如果您需要在服务器端完成排序/过滤,那么我认为您必须添加一个包装 sproc(或修改现有的)来传递排序和过滤以执行(基本上,手动完成,但至少在服务器端)。

或者,您可以编写 sql 在服务器端执行此操作(存储过程结果到临时表中,然后从该临时表中选择并应用过滤,仍然手动),然后执行 ExecuteStoreQuery

【讨论】:

    【解决方案2】:

    不,您不能将 linq 过滤的执行推迟到 sql 中的存储过程。存储的过程将首先执行,将返回一个结果集,然后您可以将其转换为您的对象类型列表,一旦完成,您可以使用 Linq 进行过滤。 您可以使用 context.Translate

    轻松地将结果集转换为对象列表

    看看这些链接:

    当然,查询(在您的代码中)在您将其转换为列表之前不会被评估,因此您可以将您想要的所有过滤连接到您的结果集,然后调用 ToList() 以获取结果。

    【讨论】:

    • 谢谢!它帮助我很好地理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2010-11-15
    • 1970-01-01
    相关资源
    最近更新 更多