Entity Framework - Сортировка отношений свойств - PullRequest
0 голосов
/ 19 июля 2011

У меня вопрос, как сортировать связанные элементы сущности.

В окне редактирования счета-фактуры у меня есть один ComboBox, отображающий всех клиентов:

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

Теперь у меня есть второй ComboBox, отображающий все контактные лица выбранного клиента.Это работает нормально, но записи в этом втором ComboBox не сортируются / сортируются по ID.

XAML:

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

;

Как получить список в2-й ComboBox отсортирован?

С уважением, и заранее спасибо за советы / предложения,

Нико

1 Ответ

0 голосов
/ 19 июля 2011

Я думаю, что есть две возможные вещи.

  • При загрузке данных : Похоже, вы используете функцию отложенной загрузки EF для загрузки Contacts, относящегося к Customer. Чтобы отсортировать Контакты, вам нужно установить, что это за опция сортировки, где она и когда, но с ленивой загрузкой они не могут быть установлены. Таким образом, вы можете использовать загрузку Eagerly или явную загрузку, чтобы заказать Contacts. Пожалуйста, отметьте Использование DbContext в EF 4.1, Часть 6: Загрузка связанных сущностей , на основе EF4.1. Примерно так, Явный случай загрузки:

    //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) .

...