У меня проблема с предоставлением предиката 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 исключены для меня ..... Спасибо