Ускорение связывания Wpf и Linq на нескольких столах? - PullRequest
0 голосов
/ 28 июня 2011

У меня есть база данных с таблицей «Article» (содержащей все мои статьи, конечно) и другой таблицей «ArticleSupplier» (содержащей поставщика для моих статей). Каждая статья может иметь несколько поставщиков.

То, что я делаю, - это привязка моей статьи таблицы к просмотру списка WPF с использованием Linq, но мне также нужно показать первую ссылку на поставщика для моих статей, поэтому я сделал привязку такого типа:

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

Это хорошо работает, за исключением производительности, прокрутка представляет собой настоящую боль, конечно, из-за количества «подзапросов», которые включает в себя моя привязка.

Как я могу добиться этого самым быстрым способом? Мне действительно нужно показать ссылку на поставщика в моем списке (без этой привязки производительность прокрутки действительно хорошая).

Большое спасибо за вашу помощь, я действительно застрял с этим.

Ответы [ 2 ]

0 голосов
/ 29 июня 2011

Я решил мою проблему следующим способом:

Я добавил пользовательское поле в свой класс linq Article под названием 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".

Похоже, она хорошо справляется с работой.

0 голосов
/ 28 июня 2011

Вы можете быстро загрузить данные вперед, используя Включить, так что это будет одноразовым ударом и производительность прокрутки не пострадает.Если дополнительное время загрузки займет проблему, либо используйте BackgroundWorker для загрузки, либо используйте аналогичный метод.

Вы можете отфильтровать только первую ссылочную сущность, используя функциональность EF 4.1 - например, C # EntityFramework 4.1 Lambda Include - выбирайте только определенные включенные значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...