“IEnumerable<>”不包含“OrderBy”的定义

Viv*_*Dev 0 linq

错误CS1929“IEnumerable”不包含“OrderBy”的定义,并且最佳扩展方法重载“DynamicQueryableExtensions.OrderBy(IQueryable, string, params object[])”需要“IQueryable”类型的接收器

我在以下查询中收到此错误。

var designationDtos = queryResult.Select(x =>
{
    var designationDto = ObjectMapper.Map<Designation, DesignationDto>(x.designation);
    designationDto.DepartmentName = x.department.Name;
    return designationDto;
}).OrderBy(input.Sorting).ToList();
Run Code Online (Sandbox Code Playgroud)

问题出在 OrderBy 上。如果我删除 orderby 那么一切都会正常。而 input.Sorting 是一个 string 。

Svy*_*liv 5

这是因为IEnumerable没有这样的OrderBy,但是您有自定义扩展来IQueryable接受这样的参数。

var designationDtos = queryResult.Select(x =>
{
    var designationDto = ObjectMapper.Map<Designation, DesignationDto>(x.designation);
    designationDto.DepartmentName = x.department.Name;
    return designationDto;
})
.AsQueryable()  
.OrderBy(input.Sorting)
.ToList();
Run Code Online (Sandbox Code Playgroud)

另外考虑在这次查询中不要使用Automapper或者完成映射配置,那么查询会更加有效。

query.ProjectTo<DesignationDto>(configuration)
   .OrderBy(input.Sorting)
   .ToList();
Run Code Online (Sandbox Code Playgroud)