2011-06-28 9 views
0

"Article"という名前のテーブル(もちろん私のすべての記事を含む)と "ArticleSupplier"という名前のテーブル(私の記事のサプライヤを含む)があります。各記事は複数のサプライヤを持つことができます。複数のテーブルでWpfとLinqのバインドをスピードアップしますか?

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

:私は、LINQのを使用してWPFのリストビューに私のテーブルアーティクルを結合されますが、私はまた私の記事のための最初のサプライヤリファレンスを表示する必要があるので、私はその種の結合でした何

この作業はパフォーマンスを除いて、スクロールは本当に苦痛であり、確かに私のバインディングに含まれる「サブクエリ」の量が原因です。

これを最も速く達成するにはどうすればよいですか?私は本当に私のlistview(そのスクロールのパフォーマンスが本当に良いバインディングなしで)サプライヤーの参照を表示する必要があります。

本当にありがとうございました。

答えて

0

「含む」を使用すると、データをすぐに読み込むことができるため、1回のヒットとなり、スクロールのパフォーマンスには影響しません。
追加の時間がかかる場合は、読み込みにBackgroundWorkerを使用するか、同様の手法を使用します。

あなたはEF 4.1の機能を使用して参照でのみ最初のエンティティをフィルタリングすることができます - このC# Entity Framework 4.1 Lambda Include - only select specific included values

+0

もう少しEF 4.1ソリューションについて説明できますか?私は自分のプロジェクトにEF 4.1エクステンションを組み込み、クエリに "Include(" ArticleSupplier ")メソッドを追加しようとしましたが、パフォーマンス面では何も変わりません。 – Karnalta

+0

私はあなたが今あなたの解決策に固執できると思います:)。 –

0

ように私には、以下の方法で、私の問題を解決:

私は第1基準と呼ばれる私の記事のLINQクラスにカスタムフィールドを追加しました「[0] .reference ArticleSupplier」私は単に「第1基準」にバインドする代わりに結合を、

  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でバインディング:それは次のようになりので、私はその後、私のLINQクエリを変更します。

かなりうまくやっているようです。

関連する問題