加速Wpf& Linq绑定多个表?

时间:2011-06-28 09:46:41

标签: wpf linq performance binding

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

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

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

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

如何以最快的方式实现这一目标?我真的需要在listview中显示供应商参考(没有那个绑定,滚动性能真的很好)。

非常感谢你的帮助,我真的很不满意。

2 个答案:

答案 0 :(得分:0)

您可以使用Include急切加载数据,这样一次性点击,滚动性能不会受到影响。
如果加载所需的额外时间将是一个问题,请使用BackgroundWorker进行加载或类似的技术。

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

答案 1 :(得分:0)

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

我在我的文章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”。

它似乎做得很好。