У меня есть база данных, в которой есть таблица «Электронная почта», поле «Тема» типа varchar (200).Когда я заказываю в SQL:
select Subject from Emails order by Subject
, я получаю результаты:
- 100-2-00000
- 100000-1-00000
- 1007-2-00000
- 1007-2-00001
- 1007-2-00002
У меня есть устаревшее настольное приложение, которое использует стороннюю сетку, который использует функции сравнения строк .NET, которые дают мне результаты в следующем порядке:
- 100000-1-00000
- 100-2-00000
- 1007-2-00000
- 1007-2-00001
- 1007-2-00002
Я провел некоторое исследование разницы, и это, вероятно, из-засопоставление, что база данных используется.Сетка .NET использует строковые значения в качестве юникода, а sql - нет.
Я проверил, что приведение поля varchar (200) к полю nvarchar (200) для упорядочения дает те же результаты:
select Subject from Emails order by cast(Subject as nvarchar(200))
- 100000-1-00000
- 100-2-00000
- 1007-2-00000
- 1007-2-00001
- 1007-2-00002
Я создаю веб-приложение, использующее LINQ для репликации порядка электронной почты, отображаемого в устаревшей сетке.Порядок сетки (имеющий десятки столбцов) может быть установлен пользователями динамически.Я создаю динамические лямбда-выражения для создания последовательности заказов по вызовам, если есть порядок по нескольким столбцам.Мое последнее препятствие для этих запросов:
Есть ли способ реплицировать деталь order by cast(Subject as nvarchar(200))
, создавая выражения в LINQ?
Текущий пример построения заказа:
var query = (*/Working query*/)
var e = Expression.Parameter(typeof(Email), "e");
var param = Expression.PropertyOrField(e, "Subject");
var OrderParam = Expression.Lambda<Func<Email, string>>( param, e);
query.OrderBy(OrderParam);
Этот запрос возвращает правильные результаты в порядке, равном select Subject from Emails order by Subject
.Но я бы хотел, чтобы они соответствовали, как если бы субъект был nvarchar.
Я не могу управлять сопоставлением непосредственно в базе данных и не могу изменить тип переменной на nvarchar.Я использую устаревшую базу данных, которая имеет гораздо больше полей, чем эта, которую я пытаюсь упорядочить.