在C#linq查询中使用IQueryable进行多重分组并返回对象列表

在C#linq查询中使用IQueryable进行多重分组并返回对象列表,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个类似于此链接的表。我必须返回一个包含以下条件的ot\u request实体类列表 我必须过滤status\u id==5的列表 过滤后,我必须按照行的project\u id 按project\u id分组后,将有一些creator\u id具有相同的值。因此在project\u id分组中,我必须再次按照creator\u id对这些项目进行分组,并将属于它们的worktime\u hours相加 我尝试了以下Linq查询: (上下文是DB实体的对象) IQueryable filte

我有一个类似于此链接的表。我必须返回一个包含以下条件的
ot\u request
实体类列表

  • 我必须过滤
    status\u id==5的列表
  • 过滤后,我必须按照行的
    project\u id
  • project\u id
    分组后,将有一些
    creator\u id
    具有相同的值。因此在
    project\u id
    分组中,我必须再次按照
    creator\u id
    对这些项目进行分组,并将属于它们的
    worktime\u hours
    相加
  • 我尝试了以下Linq查询: (上下文是DB实体的对象)

    IQueryable filterList=context.ot\u请求
    .其中(o=>o.status_id==5)
    .GroupBy(o=>o.project\u id)
    .Select(o=>new{Project=o.Key,
    总计=o.Sum(v=>v.worktime\u hours))}
    .OrderByDescending(o=>o.Total);
    
    但它向我显示了错误消息:

    错误1无法隐式转换类型
    “System.Linq.IOrderedQueryable”
    “System.Linq.IQueryable”
    。 存在显式转换(是否缺少强制转换?)


    有人能帮我解决这个问题吗?

    我建议改变一下:

    .OrderByDescending(o => o.Total);
    
    致:

    您当前正在通过现有的
    Select
    调用返回匿名类型设置,而不是您感兴趣的特定类型

    或者,如果您特别感兴趣的是
    总额
    ,请更改:

    IQueryable<ot_request> filterList 
    

    这将确保
    filterList
    是新匿名类型(包括
    Total
    )的
    IQueryable

    在您的选择中,您正在创建一个新的匿名类型。这就是为什么它会说
    System.Linq.IOrderedQueryable
    问问自己:你在订购什么?他们不是你的要求吗?或者它们是不同的东西,项目和总体的东西?所以,如果您要对这个输入进行排序,您希望输出是什么?是否可以将其转换为ot_请求?
    .OrderByDescending(o => o.Total).Select(z => z.Project);
    
    IQueryable<ot_request> filterList 
    
    var filterList