C# 无法转换隐式类型Syste.Linq.IQueryable<&书信电报;匿名类型int>&燃气轮机;到

C# 无法转换隐式类型Syste.Linq.IQueryable<&书信电报;匿名类型int>&燃气轮机;到,c#,linq,sql-to-linq-conversion,C#,Linq,Sql To Linq Conversion,我有一个SQL查询: SELECT project_id,count(project_id) as vote_count from Votes group by project_id; 用LINQ语法编写: public int GetCountOfVotes() { using (var db = new SafetyFundDbContext(Options)) { var result = db.Votes .GroupBy(

我有一个SQL查询:

SELECT project_id,count(project_id) as vote_count 
from Votes 
group by project_id;
用LINQ语法编写:

public int GetCountOfVotes()
{
    using (var db = new SafetyFundDbContext(Options))
    {

        var result = db.Votes
            .GroupBy(vote => vote.ProjectId)
            .Select(group => new
            {
                ProjectID = group.Key,
                Count = group.Count()
            });

        return result;
   }          
}
和C#返回错误:


问题出在哪里?

结果
是匿名类型的可枚举项,而不是单个int。您需要返回单个值。由于您需要单个项目的投票,因此需要通过传递ID告诉函数哪个项目:

public int GetCountOfVotes(int projectId)
{
    using (var db = new SafetyFundDbContext(Options))
    {
        return db.Votes
            .Where(vote => vote.ProjectId == projectId)
            .Count();    
   }          
}
如果需要对所有项目进行投票,则需要将返回类型更改为具体类,例如:

public class ProjectVotes
{
    public int ProjectID { get; set; }
    public int Votes { get; set; }
}
您的方法变成:

public IEnumerable<ProjectVotes> GetCountOfVotes()
{
    using (var db = new SafetyFundDbContext(Options))
    {
        return db.Votes
            .GroupBy(vote => vote.ProjectId)
            .Select(group => new ProjectVotes
            {
                ProjectID = group.Key,
                Votes = group.Count()
            })
            .ToList();
   }          
}
public IEnumerable GetCountOfVoces()
{
使用(var db=new SafetyFundDbContext(选项))
{
返回db.投票
.GroupBy(投票=>vote.ProjectId)
.选择(组=>新项目投票
{
projectd=group.Key,
投票数=组计数()
})
.ToList();
}          
}

结果
是一个匿名类型的可枚举项,而不是单个的
int
,为什么您希望它工作?我需要添加或更改什么才能工作解决方案?那么,您想在这里返回什么?所有项目的总票数是多少?每个项目的票数是多少?一个项目的票数是多少?一个(单个)项目的票数是多少:)Lol,im sry,我的错,但在一个页面中,我有5个项目,每个项目都需要votecount