Проблема в том, что вы привязываетесь к IQueryable
, поэтому каждый раз, когда вы перечисляете его, вы переводите выражение LINQ на IQueryable
в оператор SQL и возвращаетесь в базу данных для его выполнения.
Если вы пытаетесь отсортировать свойства, которые не привязаны к модели базы данных, вы получите указанную ошибку, поскольку эти свойства существуют только после создания объекта из строки данных.
Самое простое решение - вызвать ToList()
на IQueryable
, прежде чем использовать его для сортировки и привязки данных, чтобы вы сортировали объекты в памяти, где свойства фактически доступны. ToList()
преобразует ваш IQueryable
в IEnumerable
(через List<T>
) и останавливает его повторный доступ к базе данных через LINQ to SQL.
Обычно это хороший шаблон проектирования - последнее, что вам нужно, - это чтобы пользователи вашего бизнес-уровня могли невольно выполнять произвольные запросы к вашей базе данных просто потому, что вы вернули IQueryable
, где вы должны были вернуть IEnumerable
.