2011-07-19 137 views
0

我的問題是,我如何排序實體的相關項目。實體框架 - 排序關係屬性

在發票編輯窗口,我有一個組合框,顯示所有的客戶:

XAML:

<UserControl.Resources> 
     <CollectionViewSource x:Key="cvsCustomers" 
           d:DesignSource="{d:DesignInstance local:Customer, CreateList=True}" /> 
... 

    </UserControl.Resources> 

<ComboBox ItemsSource="{Binding Source={StaticResource cvsCustomers}}" .../> 

代碼隱藏:

Dim cvsCustomers As System.Windows.Data.CollectionViewSource 
cvsCustomers = CType(Me.FindResource("cvsCustomers"), System.Windows.Data.CollectionViewSource) 

Dim qryCustomers = _ 
      From c In myEntities.Customers _ 
      Order By c.CustomerCode 
      Select c 
     cvsCustomers.Source = qryCustomers 

現在我有第二個組合框顯示所有所選客戶的聯繫人。這工作正常,但在第二個組合框中的條目是未排序/按ID排序。

XAML:

<ComboBox ItemsSource="{Binding Path=myInvoice.Customer.Contacts}" .../> 

;

如何獲得排序的第二個組合框列表?

國王的問候, 並在此先感謝提示/建議,

尼科

回答

0

我認爲有兩種可能的事情。

  • 當裝載數據:這聽起來像你正在使用EF的惰性加載功能加載相關CustomerContacts。要對聯繫人進行排序,您需要設置什麼是排序選項,是否是以及何時排序,但是通過延遲加載,無法設置這些選項。因此,您可以使用熱切加載或顯式加載來訂購Contacts。根據EF4.1,請檢查Using DbContext in EF 4.1 Part 6: Loading Related Entities。像這樣,在明確裝入情況:

    //Oh, I'm not familiar with VB.NET, so it's C# code 
    var customer; // it's assumed to be initialized. 
    context.Entry(customer).Collection(c => w.Contacts) 
    .Query().Orderby(c =>c.Name).Load(); 
    
  • 通過CollectionView加載無序後的數據:可以讓CollectionView順序Contacts。請檢查CollectionViewSource Class(MSDN)

+0

好非常感謝您的回答,我會盡快嘗試了這一點:=) – Nico

+0

提防,'context.Entry(實例)'是慢如龜... :) –