【问题标题】:wpf gridcontrol bindint to liq to ef query is slowwpf gridcontrol 绑定到 linq to ef 查询很慢
【发布时间】:2016-06-19 05:12:31
【问题描述】:

我在 wpf 中有一个用户控件,其中包含一个网格控件 我已将 gridcontrol 数据源设置为 linq to ef join 查询,如下所示:

var x = from B in x.B join E in X.E on B.E_ID equals E.E_ID
        select B
gridcontrol.datasource = x.tolist();

在 xaml 代码中,我将网格控制列设置为:

第一列FieldName = ID

第二栏FieldName = E.Name

由于第二列绑定到E表,gridcontrol加载非常慢

请给我一个提高速度的解决方案

【问题讨论】:

  • 在查询中调用ToList() 是不必要的,集合就是集合,网格控件会知道如何处理它。话虽如此,您的查询是尽可能基本的。如果这对您来说还不够快,您需要考虑分页或在数据库上设置一些索引......速度很可能不是来自您的代码。
  • 感谢朋友,但我已经测试了使用和不使用 .tolist() 并检查了很多方法。如果我删除第二列,它工作得很好并且 gridcontrol 加载非常快,但问题是我需要显示第二列column.当我使用断点时,查询返回值很快,但是设置gridcontrol数据源的代码行需要很长时间
  • @pooooooneh "当我使用断点时,查询会快速返回值" 在您通过枚举或调用 ToList 和类似方法实现它之前,查询不会执行。此外,由于您在查询中仅选择B,我看不出获得E.Name 有何帮助。如果E 是延迟加载的导航属性,您最好使用急切加载(类似于db.B.Include(b => b.E).ToList()
  • 谢谢你的朋友 lvan Stoev。我使用了急切加载,速度变得更好了。现在大约需要 8 秒。如果我使用列表框而不是 gridcontrol,加载大约需要 4 秒。如果你写你的小费作为答案我可以将问题标记为已解决。谢谢和问候

标签: wpf entity-framework linq binding gridcontrol


【解决方案1】:

非常感谢 lvan Stoev 正如他/她所说,我更改了我的查询,它很有用。现在加载用户控件只需要 8 秒。 查询: db.b.include("E").tolist()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多