Сортировка данных MultiValue по номерам ИЛИ по алфавиту - LINQ to SQL и C # 3 - PullRequest
1 голос
/ 03 апреля 2009

У меня проблема с предоставлением предиката LINQ знаний, необходимых для сортировки по алфавиту или по цифрам.

Я работаю с многозначным сводным набором данных с сортируемым столбцом. Столбец всегда хранится в базе данных как varchar, однако он имеет сведения о том, что на самом деле представляет собой этот тип данных. Для упрощения, кроме строк, столбец может содержать целые числа.

Я написал универсальный (и рабочий) предикат сортировки следующим образом.

Func<MyObject, string> sortClause = p => p.MyObjectProperties.Find(s => s.Name == theSortProperty).Value;

Проблема в том, что если мой сортируемый столбец содержит числовые значения (хранятся в виде varchar в БД), я получаю

13
131   <-- 131 between 13 and 14!!!
14
15 

Конечно, буквально, это правильно.

Как я уже сказал, я программно знаю тип данных (строка или целое число) для свойства сортировки. Я хочу быть в состоянии поручить предикату сортировать, используя алфавитные средства ИЛИ числовые средства. Я не вижу простого способа сделать это, поскольку мое сопоставление LINQ to SQL объявляет этот столбец как [Column (Storage = "_ Value", DbType = "NVarChar (MAX)", UpdateCheck = UpdateCheck.Never)]

И все же я уверен, что кто-то уже видел это раньше и может предложить предложение. Я должен упомянуть, что NHibernate или другие ORM исключены для меня ..... Спасибо

Ответы [ 2 ]

0 голосов
/ 03 апреля 2009

Вы можете использовать некоторые функции System.Convert в своем запросе LINQ. Если вы измените свой заказ на System.Convert.ToInt32 (), вы сможете сортировать численно, а не лексикографически.

0 голосов
/ 03 апреля 2009

Один из способов достижения этого - заполнить строковые числовые значения нулями до длины самого широкого значения, которое может возникнуть, и отсортировать по дополненному значению:

string s = "131";
s =  s.PadLeft(8, '0');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...