Сохранение многотипного выражения OrderBy как свойства

В общем абстрактном базовом классе я храню пару выражений, используемых для упорядочивания:

public Expression<Func<T, string>> OrderByString { get; set; }
public Expression<Func<T, int>> OrderByInt { get; set; }

Используется позже в универсальной базе class:

if (OrderByString != null)
{
    results = results.OrderBy(OrderByString);
}
else if (OrderByInt != null)
{
    results = results.OrderBy(OrderByInt);
}

Наконец, один из них будет установлен в конструкторе производного конкретного класса:

this.OrderByString = c => c.CustomerID;

Мне не нравится тот факт, что мне нужно иметь отдельные выражения, основанные на типе свойства, которое я хочу OrderBy. ToString не будет работать с этим свойством, потому что LINQ to Entities его не поддерживает. Мне нужен способ хранения выражения, которое выбирает любое из свойств для упорядочивания независимо от типа.

Если я попробую что-нибудь более общее, например:

public Expression<Func<T, object>> Order { get; set; }

Невозможно привести тип System.Int32 к типу System.Object. LINQ to Entities поддерживает только приведение типов примитивов модели данных сущностей.

Кроме того, если я попробую немного взломать, это тоже не сработает:

public Expression<Func<T, string>> Order { get; set; }
this.Order = c => c.OrderID.ToString();

LINQ to Entities не распознает метод 'System.String ToString ()', и этот метод нельзя преобразовать в выражение store .

7
задан Dan Revell 12 October 2011 в 14:16
поделиться