Я мог бы использовать некоторую помощь при преобразовании выражений.Преобразование из выражения <Func <TypeIn, TypeOut1 >> в выражение <Func <TypeIn, TypeOut2 >>
У меня есть метод на класс, который выглядит следующим:
protected IQueryOver<TEntity, TEntity> OrderQuery<TOrderBy>(
Expression<Func<TEntity, TOrderBy>> orderBy)
{
return session.QueryOver<TEntity>().OrderBy(orderBy).Asc;
}
Это общий запрос для хранилища класса. Я хочу сохранить общие данные, поэтому я задал параметр TOrderBy, чтобы тип свойства не имел значения. Тем не менее, этот пример реализации с использованием NHibernate, и я пытаюсь сделать следующее:
var query = session.QueryOver<TEntity>().OrderBy(orderBy).Asc;
Однако Ther метод OrderBy принимает параметр Expression> и поэтому я получаю ошибку компиляции, поскольку нет никакой гарантии, что TOrderBy будет объектом.
Есть ли способ сделать это преобразование или я должен просто придерживаться использования объекта, а не TOrderBy? Если я придерживаюсь объекта, не теряю ли я способность заказывать ValueTypes (например, DateTime)?
Спасибо за любую помощь/предложения.
EDIT: Я должен упомянуть, что я сохранил этот общий код, поскольку буду писать реализации для nhibernate и сущности. В EF нет проблемы с этим, поскольку он использует обычный метод Linq OrderBy. Это просто в реализации Nhibernate. У меня эта проблема.
Возможно, я ошибаюсь, но если есть ошибка с TOrderBy, вы можете попробовать добавить ограничения типа «где TOrderBy: class» –
Я не хочу добавлять ограничение класса, так как вы не сможете использовать вещи например DateTime или int или другие типы значений –
Можете ли вы использовать typeof (TOrderBy) для запуска альтернативной логики для ссылочных типов значений? – Rich