这是一个设计问题, 我有这个扩展方法:
public static IQueryable<R> ToViewModels<T,R>(this IQueryable<T> DBModels_Q)
{
//calling another method (irrilevant for this question)
return ToViewModels<T, R>().Invoke(DBModels_Q.AsExpandable());
}
如果调用:
,此方法效果很好//db is the EntityFramework context and Employee is the DB table
db.Employee.ToViewModels<DBModels.Employee, ViewModels.Employee>();
我想知道是否有办法在不指定T的类型的情况下使用它:
db.Employee.ToViewModels<ViewModels.Employee>();
像How do I get the calling method name and type using reflection?这样的东西会很有用。
更新
喜欢建议答案是Partial generic type inference possible in C#?
遗憾的是,唯一的方法是包装所有内容并使用2种方法:public static ViewModelsWrapper<TSource> LoadViewModels<TSource> (this IQueryable<TSource> DBModels_Q)
{
return new ViewModelsWrapper<TSource>(DBModels_Q);
}
public class ViewModelsWrapper<TSource>
{
private readonly IQueryable<TSource> DBModels_Q;
public ViewModelsWrapper(IQueryable<TSource> DBModels_Q)
{
this.DBModels_Q = DBModels_Q;
}
public IQueryable<TResult> GetViewModels<TResult>()
{
return ToModels<TSource, TResult>().Invoke(this.DBModels_Q.AsExpandable());
}
}
像
一样使用它sv.db.Employee.LoadViewModels().GetViewModels<EmployeeModel>();