Asp.net 在实体框架中,如何在Select子句中使用聚合函数?

Asp.net 在实体框架中,如何在Select子句中使用聚合函数?,asp.net,entity-framework,linq,Asp.net,Entity Framework,Linq,是否可以将以下工作SQL语句转换为实体框架查询 SELECT Year([Model Date]) ,Model ,COUNT(SERIAL) AS [Model Count] ,(SUM([SCORE])/COUNT(SERIAL)) as [Average SCORE] ,(COUNT(SERIAL)/SUM([SCORE])) * 100 AS [Score Rate] FROM [MODELS] WHERE Model IS NOT

是否可以将以下工作SQL语句转换为实体框架查询

SELECT Year([Model Date])
       ,Model
       ,COUNT(SERIAL) AS [Model Count]
       ,(SUM([SCORE])/COUNT(SERIAL)) as [Average SCORE]
       ,(COUNT(SERIAL)/SUM([SCORE])) * 100 AS [Score Rate]
FROM [MODELS]
WHERE Model IS NOT NULL 
AND [ACE PROFILE] <> 0
AND SERIAL IS NOT NULL
GROUP BY Model, Year([Model Date])
选择年份([车型日期])
模型
,计数(串行)为[型号计数]
,(总和([分数])/计数(系列))为[平均分数]
,(计数(序列)/总和([得分])*100作为[得分率]
来自[模型]
其中模型不为NULL
和[ACE配置文件]0
序列号不为空
按车型分组,年份([车型日期])
公共类数据库:DbContext
{
公共数据库(字符串连接):基(连接){}
公共数据库集模型{get;set;}
}
[表格(“模型”)]
公共类模型
{
[关键]
公共字符串模型{get;set;}
[System.ComponentModel.DataAnnotations.Schema.Column(“ACE配置文件”)]
公共int?ACE_配置文件{get;set;}
公共int?串行{get;set;}
公共整数?分数{get;set;}
[System.ComponentModel.DataAnnotations.Schema.Column(“平均分数”)]
公共整数平均分{get;set;}
[System.ComponentModel.DataAnnotations.Schema.Column(“模型日期”)]
公共日期时间模型_日期{get;set;}
}
void Main()
{
var db=新的db(Connection.ConnectionString);
var结果=以db.MODELS表示的T
其中T.Model!=null&&T.ACE\u PROFILE!=0&&T.SERIAL!=null
按新的{DateYear=T.Model_Date.Year,T.Model}将T分组到g中
选择新的
{
g、 关键日期年份,
g、 关键。模型,
Model_Count=g.Count(c=>c.SERIAL!=null),
平均得分=g.Sum(c=>c.SCORE)/g.Count(c=>c.SERIAL!=null),
得分率=(g.Count(c=>c.SERIAL!=null)/g.Sum(c=>c.Score))*100
};
}
公共类数据库:DbContext
{
公共数据库(字符串连接):基(连接){}
公共数据库集模型{get;set;}
}
[表格(“模型”)]
公共类模型
{
[关键]
公共字符串模型{get;set;}
[System.ComponentModel.DataAnnotations.Schema.Column(“ACE配置文件”)]
公共int?ACE_配置文件{get;set;}
公共int?串行{get;set;}
公共整数?分数{get;set;}
[System.ComponentModel.DataAnnotations.Schema.Column(“平均分数”)]
公共整数平均分{get;set;}
[System.ComponentModel.DataAnnotations.Schema.Column(“模型日期”)]
公共日期时间模型_日期{get;set;}
}
void Main()
{
var db=新的db(Connection.ConnectionString);
var结果=以db.MODELS表示的T
其中T.Model!=null&&T.ACE\u PROFILE!=0&&T.SERIAL!=null
按新的{DateYear=T.Model_Date.Year,T.Model}将T分组到g中
选择新的
{
g、 关键日期年份,
g、 关键。模型,
Model_Count=g.Count(c=>c.SERIAL!=null),
平均得分=g.Sum(c=>c.SCORE)/g.Count(c=>c.SERIAL!=null),
得分率=(g.Count(c=>c.SERIAL!=null)/g.Sum(c=>c.Score))*100
};
}

你先试了吗?我试了!但是我在select子句中不断得到访问错误。看来我不知怎么把我的团队搞得一团糟。威汉把我摆平了。谢谢大家。你们应该分享你们尝试过的东西,这不是一个代码编写服务。你们是先尝试的吗?是的!但是我在select子句中不断得到访问错误。看来我不知怎么把我的团队搞得一团糟。威汉把我摆平了。谢谢大家。你应该分享你的尝试,这不是一个代码编写服务。
public class Db : DbContext
{
    public Db(string connection) : base(connection) {}
    public DbSet<MODEL> MODELS { get; set; }
}

[Table("MODELS")]
public class MODEL
{
    [Key]
    public string Model { get; set; }
    [System.ComponentModel.DataAnnotations.Schema.Column("ACE PROFILE")]
    public int? ACE_PROFILE { get; set; }
    public int? SERIAL { get; set; }
    public int? SCORE { get; set; }
    [System.ComponentModel.DataAnnotations.Schema.Column("Average SCORE")]
    public int Average_SCORE { get; set; }
    [System.ComponentModel.DataAnnotations.Schema.Column("Model Date")]
    public DateTime Model_Date { get; set; }
}

void Main()
{
    var db = new Db(Connection.ConnectionString);

    var result =    from T in db.MODELS
                    where T.Model != null && T.ACE_PROFILE != 0 && T.SERIAL != null
                    group T by new { DateYear = T.Model_Date.Year, T.Model } into g
                    select new
                    {
                        g.Key.DateYear,
                        g.Key.Model,
                        Model_Count = g.Count(c => c.SERIAL != null),
                        Average_SCORE = g.Sum(c => c.SCORE ) / g.Count(c => c.SERIAL != null),
                        Score_Rate = (g.Count(c => c.SERIAL != null) / g.Sum(c => c.SCORE)) * 100
                    };
}