C# 为泛型扩展方法创建重载

C# 为泛型扩展方法创建重载,c#,generics,extension-methods,C#,Generics,Extension Methods,我创建了以下扩展 代码 public static class QueryableExtensions { public static QueryMapper<TSource> Map<TSource>(this IQueryable<TSource> source) { return new QueryMapper<TSource>(source); } public static ObjectM

我创建了以下扩展

代码

public static class QueryableExtensions
{
    public static QueryMapper<TSource> Map<TSource>(this IQueryable<TSource> source)
    {
        return new QueryMapper<TSource>(source);
    }

    public static ObjectMapper<TSource> Map<TSource>(this TSource obj)
    {
        return new ObjectMapper<TSource>(obj);
    }
}
return this.repository.FindAll()
           .OrderBy(o => o.Name)
           .Map().To<TEntityDto>();
公共静态类QueryableExtensions
{
公共静态QueryMapper映射(此iQueryTable源)
{
返回新的QueryMapper(源);
}
公共静态ObjectMapper映射(此TSource obj)
{
返回新的ObjectMapper(obj);
}
}
我如何称呼上述内容

public static class QueryableExtensions
{
    public static QueryMapper<TSource> Map<TSource>(this IQueryable<TSource> source)
    {
        return new QueryMapper<TSource>(source);
    }

    public static ObjectMapper<TSource> Map<TSource>(this TSource obj)
    {
        return new ObjectMapper<TSource>(obj);
    }
}
return this.repository.FindAll()
           .OrderBy(o => o.Name)
           .Map().To<TEntityDto>();
返回此.repository.FindAll()
.OrderBy(o=>o.Name)
.Map().To();
错误

无法将类型“TEntityDto”隐式转换为 'System.Collections.Generic.IEnumerable'。明确的 存在转换(您是否缺少演员阵容?)

我最初的解决方案是重命名将IQueryable作为“MapQuery”输入的方法


但我希望在对对象或集合调用时使用相同的命名约定。我不知道如何添加约束(或其他)来限制调用/源对象的外观。(例如,单个类/类集合)

添加这个解决了我的问题,因为我使用它的查询链有一个ORDERBY,结果对象是IOrderedQueryable,而不是IQueryable

public static QueryMapper<TSource> Map<TSource>(this IOrderedQueryable<TSource> source) 
{
   return new QueryMapper<TSource>(source); 
}
公共静态查询映射(此IOrderedQueryable源)
{
返回新的QueryMapper(源);
}
作为最后的考虑…

我只是想知道为什么“Map(this TSource obj)”会优先于“Map(this IQueryable source)”,因为IOrderedQueryable有一个IQueryable的基类型

有关该主题的更多信息