Учитывая Parent и действительное имя столбца, я хочу найти все связанные дочерние элементы, упорядоченные по имени динамического столбца. Вот как я думал, что мой код будет выглядеть:
Parent. // EntityObject
Children. // EntityCollection
Where(c => c.Gender == 'm'). // IEnumerable
OrderBy(columnName, ListSortDirection.Ascending). // -- not available --
Skip(pages * pageSize).Take(pageSize);
IEnumerable.OrderBy(string columnName) не существует. Оглядываясь вокруг, чтобы выполнить «сортировку по имени динамического столбца», я начал с этого отлично выглядящего решения: Как создать дерево выражений для сортировки во время выполнения? , но это работает с IQueryable
Если бы это было так, я предполагаю, что это привело бы к передаче записей по сети для сортировки и в любом случае снизило бы производительность моего пейджера. Итак, я переупорядочил:
Repository. // Repository
Children. // ObjectSet
Where(c => c.Parent == Parent && c.Gender == 'm'). // ObjectQuery, runtime error
OrderBy(columnName, ListSortDirection.Ascending). // IOrderedQueryable
Skip(pages * pageSize).Take(pageSize);
ObjectSet и ObjectQuery реализуют OrderBy(string columnName), и этот код компилируется, но выдает ошибку:
Не удалось создать постоянное значение типа DataModel.Parent. В этом контексте поддерживаются только примитивные типы («такие как Int32, String и Guid»).
Конечно, я могу получить идентификатор родителя, но Child.ParentReference также не является примитивным типом.
Я могу придумать несколько способов, которые привели бы к загрузке всего набора записей по сети, но я чувствую, что должен что-то упустить, потому что не должно быть так сложно передать набор основных директив в базу данных, используя все MS. -центрические технологии.
изменить: притвориться, что я http://en.wikipedia.org/wiki/Quiverfull , и нужно разбить на страницы моих детей. :) edit2: разъяснил мою необходимость запрашивать имя динамического столбца.