2011-07-19 110 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(实例)'是慢如龟... :) –