【问题标题】:How does "ToList" alter the output of my EntityFramework query?“ToList”如何改变我的 EntityFramework 查询的输出?
【发布时间】:2011-12-01 19:36:00
【问题描述】:

您好,我正在使用实体框架/Vb.net 2010。 我有一个绑定源到实体的表单,我想知道这两条指令之间有什么区别:

  1. MyBindingSource.datasource = 从 t in context.MyTable1 where ...一些条件 选择 t

  2. MyBindingSource.datasource = (From t in context.MyTable1 where ...一些条件 选择 t).ToList

问题是,当使用它们中的每一个时,我在 bindingsource 上添加、删除或修改记录时会遇到不同的情况(例如,当使用第二条指令时,当我删除实体上的某些内容时,该记录仍然存在于 bindingsource 上,直到我关闭并重新打开表单,或者我也应该从 bindingsource 中删除记录,如果我在从实体中删除时使用第一条指令,则 bindingsource 会立即更新)

你能给我解释一下吗?我应该使用哪一个? 谢谢。

【问题讨论】:

    标签: .net entity-framework-4


    【解决方案1】:

    第一个返回一个查询,您可以在其中添加更多 where 子句、排序等。将其绑定到数据源将导致它执行。这将保持到实体的链接,以便绑定源可以自动更新。

    第二个执行查询并返回对象列表。然后将其绑定到数据源。此列表与实体分开,因此需要重新阅读,当您重新打开表单时会发生这种情况。

    【讨论】:

    • 谢谢,但是看了你的回答,我在使用第二条指令时发现了一个奇怪的情况。如果我在实体上添加或删除记录,绑定源不会立即更新,但是如果我更新记录bindingsource 数据库会立即更新。如果我在使用第一条指令时尝试在 bindingsource 上添加记录,有时会出现错误“无法将项目添加到只读或固定大小列表”
    【解决方案2】:

    第一个返回 IEnumerable(OfType T),第二个返回 List(OfType T)

    【讨论】:

      猜你喜欢
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      相关资源
      最近更新 更多