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

时间:2018-01-04 07:14:25

标签: c# entity-framework linq

我在这个链接中有一个表ot_request。我必须返回具有以下条件的ot_request实体类列表。

  1. 我必须过滤status_id==5
  2. 所在的列表
  3. 过滤后,我必须按行project_id
  4. 对行进行分组
  5. project_id分组后,会有一些creator_id具有相同的值。因此,在project_id分组中,我必须再次按照creator_id对这些项目进行分组,并将worktime_hours归为它们。
  6. 我尝试过以下Linq查询: (上下文是数据库实体的对象)

    IQueryable<ot_request> filterList = context.ot_request
                                      .Where(o => o.status_id == 5)
                                      .GroupBy(o => o.project_id)
                                      .Select(o => new { Project = o.Key, 
                                              Total = o.Sum(v=>v.worktime_hours))})
                                      .OrderByDescending(o => o.Total);
    

    但是它显示了错误消息:

      

    错误1无法隐式转换类型   'System.Linq.IOrderedQueryable<AnonymousType#1>'来       'System.Linq.IQueryable<Project.DataEntity.ot_request>'。       存在显式转换(您是否错过了演员?)

    任何人都可以帮我解决问题吗?

1 个答案:

答案 0 :(得分:0)

我建议改变:

.OrderByDescending(o => o.Total);

为:

.OrderByDescending(o => o.Total).Select(z => z.Project);

您目前正在通过现有的Select来电回复匿名类型设置,而不是您感兴趣的特定类型。

或者,如果您对Total特别感兴趣,请更改:

IQueryable<ot_request> filterList 

为:

var filterList 

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