Я хочу заказать список моего класса «SortObject». Этот класс предназначен для имитации строки DataGrid путем хранения произвольных данных, организованных в словаре (с именем «Cells»), где ключ аналогичен столбцу DataGrid. Принудительно, что любой заданный ключ связан только с одним типом данных, например, ключ «Name» будет иметь только значения типа String.
Мой код (ниже) действительно работает в большинстве случаев Я использовал:
// public Dictionary<string, object> Cells { get; set; } <-- relevant field from 'SortObject'
List<SortObject> sortObjects = GetSortObjects(); // This is simplified, the data has a few different sources
IOrderedEnumerable<SortObject> orderedList = sortObjects.OrderBy(p => p.Cells["ArbitraryKey"]);
SortObject firstObject = sortedList.First();
// other work with 'orderedList' follows
Проблема возникает, когда я пытаюсь использовать объекты OrderBy типа DateTime, и , некоторые из этих объектов не установлены и по умолчанию - System.DBNull. В этом случае возникает исключение при вызове sortedList.First () или в любой из последующих ссылок на sortedList. Исключение простое: « Объект должен иметь тип DateTime », что, похоже, является следствием попытки OrderBy сравнить тип DateTime с типом DBNull.
Я пробовал два решения, которые до сих пор не работали:
Попытка первая: установите для DBNull значение new DateTime. Теоретически это должно работать, но мне нужно будет создавать не просто объекты типа DateTime, а объекты любого произвольного типа на лету. (Мне также нужно было бы принять к сведению эти SortObjects и вернуть их данные в DBNull, как только я установил правильный порядок; в конце концов, я не могу фактически изменять данные).
Попытка вторая: организовать только DBNull , затем просто DateTime, а затем сложите их вместе. Опять же, это может работать теоретически, но «другая работа», упомянутая в фрагменте кода, обширна, включая переупорядочение с помощью ThenBy () произвольное количество раз для любого ключа (ключей). Удвоение сложности - не изящное решение, и я считаю это резервным копированием.
Как лучше всего решить эту проблему?
PS: Для OrderBy и DateTime Я использую Microsoft. NET Framework v4.6.2