避免使用扩展方法在泛型中指定类型

时间:2015-07-23 11:07:23

标签: c# .net generics extension-methods

这是一个设计问题, 我有这个扩展方法:

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>();

0 个答案:

没有答案