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的基类型
有关该主题的更多信息