我创建了以下扩展程序。
代码
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>();
错误
无法隐式转换类型&#39; TEntityDto&#39;至 &#39; System.Collections.Generic.IEnumerable&#39 ;.一个明确的 存在转换(你错过了演员吗?)
我原来的解决方案是将以IQueryable作为输入的方法重命名为&#34; MapQuery&#34; ...
但是我想在对象或集合上调用它时具有相同的命名约定。我不确定如何添加约束(或某些东西)来限制调用/源对象应该是什么样子。 (EG。单班/班级集合)
答案 0 :(得分:0)
添加这个解决了我的问题,因为我使用它的查询链有一个order by,结果对象是IOrderedQueryable,而不是IQueryable。
public static QueryMapper<TSource> Map<TSource>(this IOrderedQueryable<TSource> source)
{
return new QueryMapper<TSource>(source);
}
最后的想法......
我只是想知道为什么&#34; Map(这个TSource obj)&#34;,优先于&#34; Map(这个IQueryable源)&#34;,因为IOrderedQueryable有一个基础IQueryable的类型?
有关该主题的更多信息
Generics and calling overloaded method from difference class - precedence issue