Я пытаюсь создать код для динамической сортировки Linq IQueryable <>.Сильно типизированная динамическая сортировка Linq
Очевидный способ здесь, которая сортирует список, используя строку для имени поля
http://dvanderboom.wordpress.com/2008/12/19/dynamically-composing-linq-orderby-clauses/
Однако я хочу одно изменение - время компиляции проверки имен полей, а также возможность использовать рефакторинг/Найти все Ссылки для поддержки последующего обслуживания. Это означает, что я хочу определить поля как f => f.Name, а не как строки.
Для моего конкретного использования я хочу инкапсулировать некоторый код, который бы определил, какой из списков названных выражений «OrderBy» должен использоваться на основе ввода пользователем, не записывая каждый раз каждый код.
Вот суть того, что я написал:
var list = from m Movies select m; // Get our list
var sorter = list.GetSorter(...); // Pass in some global user settings object
sorter.AddSort("NAME", m=>m.Name);
sorter.AddSort("YEAR", m=>m.Year).ThenBy(m=>m.Year);
list = sorter.GetSortedList();
...
public class Sorter<TSource>
...
public static Sorter<TSource> GetSorter(this IQueryable<TSource> source, ...)
Функция GetSortedList определяет, какие из названных видов использования, что приводит к объекту списка, где каждый FieldData содержит MethodInfo и значение Типа полей, передаваемых в AddSort:
public SorterItem<TSource> AddSort(Func<T, TKey> field)
{
MethodInfo ... = field.Method;
Type ... = TypeOf(TKey);
// Create item, add item to diction, add fields to item's List<>
// The item has the ThenBy method, which just adds another field to the List<>
}
Я не уверен, если есть способ, чтобы сохранить весь объект поля таким образом, что позволит ему быть возвращены позже (это было бы невозможно бросить, так как оно является общим типом)
Есть ли способ, которым я мог бы адаптировать образец кода или создать совершенно новый код для сортировки с использованием строго типизированных имен полей после они были сохранены в каком-то контейнере и получены (потеряние какого-либо родового типа)
Посмотреть сообщение: (. Это может помочь другим, кто ищет "волшебную" заказ на) http://stackoverflow.com/questions/41244/dynamic-linq-orderby – Nordes