【问题标题】:Speedup Wpf & Linq binding on multiple table?在多个表上加速 Wpf 和 Linq 绑定?
【发布时间】:2023-03-17 11:36:01
【问题描述】:

我有一个数据库,其中有一个名为“Article”的表(当然包含我所有的文章)和另一个名为“ArticleSupplier”的表(包含我的文章的供应商)。每篇文章可以有多个供应商。

我所做的是使用 Linq 将我的表格文章绑定到 WPF 列表视图,但我还需要显示我的文章的第一个供应商参考,所以我做了这样的绑定:

DisplayMemberBinding="{Binding Path=ArticleSupplier[0].reference, Mode=OneWay}"

这很好用,除了性能之外,滚动真的很痛苦,这当然是由于我的绑定涉及的“子查询”数量。

我怎样才能以最快的方式实现这一目标?我真的需要在我的列表视图中显示供应商参考(没有绑定滚动性能非常好)。

非常感谢您的帮助,我真的很困惑。

【问题讨论】:

    标签: wpf linq performance binding


    【解决方案1】:

    您可以使用 Include 提前加载数据,因此它是一次性的,并且不会影响滚动性能。
    如果加载所需的额外时间会成为问题,请使用 BackgroundWorker 进行加载或类似技术。

    您可以使用 EF 4.1 功能仅过滤引用的第一个实体 - 就像 C# Entity Framework 4.1 Lambda Include - only select specific included values

    【讨论】:

    • 您能多解释一下 EF 4.1 解决方案吗?我尝试在我的项目中包含 EF 4.1 扩展并将“Include("ArticleSupplier")”方法添加到我的查询中,但它在性能方面没有任何改变。
    • 我认为您现在可以坚持使用您的解决方案 :),竖起大拇指。
    【解决方案2】:

    我用以下方法解决了我的问题:

    我在我的 Article linq 类中添加了一个名为 firstReference 的自定义字段,然后我更改了我的 linq 查询,现在它看起来像这样:

                var articlesQuery = from art in QueryDataContext.Article
                                    join artSup in QueryDataContext.ArticleSupplier on art.uid equals artSup.uidArticle
                                                select new
                                                {
                                                    Article = art,
    
                                                    firstSupplierUid = artSup.uid,
                                                    firstReference = artSup.reference,
                                                    firstFormat = artSup.format,
                                                };
    

    在我的 XAML 绑定中,我没有绑定到“ArticleSupplier[0].reference”,而是简单地绑定到“firstReference”。

    它似乎做得很好。

    【讨论】:

      猜你喜欢
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多