У меня есть универсальный класс:
public class ProviderAdapter<TDto, TModel>
{
public ProviderAdapter(IQueryable source, Func<TDto, TModel> mapping)
{
... //not important
}
}
и метод расширения:
public static class QueryableExtensions
{
public static IQueryable<TModel> Map<TDto, TModel>(
this IQueryable<TDto> query, Func<TDto, TModel> mapping)
{
var providerAdapter = new ProviderAdapter<TDto, TModel>(query, mapping);
var result = new QueryableAdapter<TModel>(providerAdapter);
return result;
}
}
Теперь я хочу создать другой метод расширения для неуниверсального IQueryable:
public static class QueryableExtensions
{
public static IQueryable<TModel> Map<TModel>(
this IQueryable query, Func<dynamic, TModel> mapping)
{
//how to create ProviderAdapter instance having
//query.ElementType and mapping Func with dynamic?
var providerAdapter = new ProviderAdapter<type from query.ElementType, TModel>(query,
new Func<type from query.ElementType, TModel> using mapping Func<dynamic,TModel>
}
}
Возможно ли это?Я не уверен насчет типа параметра 'mapping' - я планировал создать новый Func, используя отражение, которое вызывает
Func<dynamic, TModel>
, но преобразует первый параметр в query.ElementType.Возможно, параметр 'mapping' должен иметь тип
Expression<Func<dynamic, TModel>>