2013-02-28 4 views
0

Мое приложение EF 5.0 Code Сначала используется DbContext. Я пытался манипулировать (фильтр &) с помощью Linq. Я первая попытка загрузить контекст Local как:Linq to Entities Query Only Recognize Integer

context.mytable.orderby(function a a.somestring).thenby(function b d.someint).load 

Я не получаю сообщение об ошибке, но строка заказ игнорируется. Работа типа int. Аналогично, когда я пытаюсь установить источник привязки, строки linq, сравнивающие строки или даты, не работают, но когда я использую целые числа, это работает. Я предполагаю, что они не правильно преобразуются в SQL-запрос, но я не могу понять, как их исправить. Я был бы признателен за правильное направление.

+0

Вам просто нужно заказать данные в пользовательском интерфейсе с определенным заказом? –

+0

Можете ли вы дать нам некоторые примеры данных, чтобы показать нам, что проблема с упорядочением? – IronMan84

+0

Manos - Да. Я использую предложения Where clauses и Order для получения данных для отображения пользователю. У меня такая же проблема с предложениями Where. – user1626137

ответ

0

Load() однако не создает ничего, он принимает только кучу элементов и загружает их из исходного источника в ваш контекст. Вы не можете наложить порядок на context.mytable, потому что моя таблица не содержит фактические данные, она содержит часть запроса, который вы будете использовать для получения фактических данных.

Чтобы получить заказ на ваш пользовательский интерфейс, вам необходимо либо заказать список, к которому вы привязываетесь, либо использовать неупорядоченный список, и обернуть его в объект, задачей которого является применение порядка. Поскольку вы используете Local, пойдите с последним и используйте CollectionViewSource.

Вот пример CollectionViewSource в WPF. Это связано с имущественным StateOrProvinces в DataContext, который является неупорядоченный список, который я хочу отображаться в следующем порядке:

<UserControl.Resources> 
    <CollectionViewSource x:Key="stateOrProvinceViewSource" Source="{Binding Path=StateOrProvinces}" > 
     <CollectionViewSource.SortDescriptions> 
      <scm:SortDescription PropertyName="Name" /> 
     </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 
</UserControl.Resources> 

с Scm существа:

xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" 

То же самое в коде:

CollectionViewSource orderedView = new CollectionViewSource() 
    { 
     Source = StateOrProvinces, 
    }; 
orderedView.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); 

Использование дополнительного слоя для применения заказа имеет несколько преимуществ. Он позволяет отображать один и тот же список с разными порядками в разных местах, и вы добавляете/удаляете элементы из основного списка без необходимости вручную применять заказ каждый раз.

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