Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq查询以获取具有平均评级分数的所有项目_Linq_Entity Framework Core - Fatal编程技术网

Linq查询以获取具有平均评级分数的所有项目

Linq查询以获取具有平均评级分数的所有项目,linq,entity-framework-core,Linq,Entity Framework Core,我有一个与1+评级相关的事件实体。我需要查询我的数据库,以便仅获取(例如)此特定事件的总评分平均为2星的事件。速率1、2、3、4的值可以介于[0,1,2,3,4,5]星之间 public class Event { public int Id { get; set; } public string Title { get; set; } public virtual List<Rating> Ratings { get; set; } } public cl

我有一个与1+评级相关的事件实体。我需要查询我的数据库,以便仅获取(例如)此特定事件的总评分平均为2星的事件。速率1、2、3、4的值可以介于[0,1,2,3,4,5]星之间

public class Event
{
    public int Id { get; set; }
    public string Title { get; set; }
    public virtual List<Rating> Ratings { get; set; }
}

public class Rating
{
    public int Id { get; set; }
    public int Rate1 { get; set; }
    public int Rate2 { get; set; }
    public int Rate3 { get; set; }
    public int Rate4 { get; set; }
    public virtual Event Event { get; set; }
}
公共类事件
{
公共int Id{get;set;}
公共字符串标题{get;set;}
公共虚拟列表评级{get;set;}
}
公共等级评定
{
公共int Id{get;set;}
公共int-Rate1{get;set;}
公共int-Rate2{get;set;}
公共int-Rate3{get;set;}
公共int-Rate4{get;set;}
公共虚拟事件事件{get;set;}
}
例如:1个事件,有3个评级,如下所示:

身份证号码:1 评级1:3 评分2:2 评分3:5 评分4:1

身份证号码:2 评分1:4 评分2:1 评分3:0 评分4:1

身份证号码:3 评级1:3 评分2:1 费率3:3 费率4:2

平均值计算如下:((3+2+5+1)+(4+1+0+1)+(3+1+3+2))/12=2,16(四舍五入为2)

我想知道是否可以编写一个Linq查询来获取所有评级为2的事件?

是的,从技术上讲

var eventsWithRatingOfExactlyTwo = Events
    .Where(e => (e.Ratings.Average(r => r.Rate1 + r.Rate2 + r.Rate3 + r.Rate4) / 4) == 2);
不过,我怀疑寻找准确评级的效用:你可能会想寻找评级在给定范围内的项目

我也鼓励你重新思考你的领域模型。是什么让这四个“费率”如此特殊,以至于你不太可能在每个费率中再增加一个费率?这些可能应表示为另一个表中的行,而不是此表中的列。

每个评级(1、2、3、4)针对不同的方面(例如:“全球体验”评级1,“设施”评级2,…)。你在这里发布的代码对我帮助很大。我只是被数学包围了。轮(…平均…,0)