C# 实体框架:GROUPBY和Join

C# 实体框架:GROUPBY和Join,c#,join,group-by,entity-framework-6,C#,Join,Group By,Entity Framework 6,我需要从数据库中获取一些统计数据,但我无法让它按我所希望的那样工作。我有两个表,Task和Status,我需要获得每个状态的任务数,例如,如果我的状态为New和Closed,并且每个任务只有一个状态,我需要如下列表: New 35 Closed 47 这就是我到目前为止所做的: var statistics = database.Task .GroupBy(t => t.StatusId) .Select(g => ne

我需要从数据库中获取一些统计数据,但我无法让它按我所希望的那样工作。我有两个表,Task和Status,我需要获得每个状态的任务数,例如,如果我的状态为New和Closed,并且每个任务只有一个状态,我需要如下列表:

New      35
Closed   47
这就是我到目前为止所做的:

var statistics = database.Task
            .GroupBy(t => t.StatusId)
            .Select(g => new { Status = g.Key, Count = g.Count() }).ToList();
这将返回StatusId和任务计数,因此我需要做的就是将StatusId替换为Status.Name。基本上,我需要将上述内容与一个连接表Status结合起来,然后获取Status.Name。但我失败了,有人能帮我吗?

试试这个:

var statistics = database.Task
    .GroupBy(t => new { Id = t.StatusId, Name = t.Status.Name })
    .Select(g => new { StatusId = g.Key.Id, StatusName = g.Key.Name, Count = g.Count() })
    .ToList();

如果您正确地为实体建模以具有导航属性,则不必加入。可以显示实体类吗?状态表上没有FK吗??如果您已经这样做了,EF应该作为任务的一部分生成代理子类-然后您会在linq查询中找到
t.Status.Name
,我有外键,通常我会生成t.Status.Name,但在Select()中我没有访问权。无论如何,它都不起作用。如果您的表中有
StatusName
,那么您为您的问题所做的努力就是将
StatusId
替换为
StatusName
@Hultan@Viplock我的表中没有StatusName,我必须做一些调整,如下所示……我认为任务表中没有
statusname
。因此它不会工作,我只需要做一些小的调整:var statistics=database.task.GroupBy(t=>new{Id=t.StatusId,Name=t.Status.Name})。选择(g=>new{Series=1,Status=g.Key.Name,Count=g.Count())。ToList()@胡尔坦:我据此编辑了我的答案。如果你确实需要回答,你也应该接受回答…@JanPalas:只要点击复选框,对吗?现在对吗?