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
C# 林克集团_C#_Linq_Average - Fatal编程技术网

C# 林克集团

C# 林克集团,c#,linq,average,C#,Linq,Average,我是C#的新手,正在尝试回答一些关键问题。我被困在1号标记为困难 Q:平均数最高的前10个始发机场是什么​ 出发延迟,包括这些延迟的值?(提示:使用分组依据) 我有一个名为“Flights”的列表,里面有超过20000个类的对象“FlightInfo” FlightInfo类的属性包括: 字符串载体、字符串起点、字符串终点、整数出发延迟、整数到达延迟、整数取消、整数距离 我知道我应该按FlightInfo.Origin对FlightInfo进行分组,然后按FlightInfo.Departure

我是C#的新手,正在尝试回答一些关键问题。我被困在1号标记为困难

Q:平均数最高的前10个始发机场是什么​ 出发延迟,包括这些延迟的值?(提示:使用分组依据)

我有一个名为“Flights”的列表,里面有超过20000个类的对象“FlightInfo”

FlightInfo类的属性包括: 字符串载体、字符串起点、字符串终点、整数出发延迟、整数到达延迟、整数取消、整数距离

我知道我应该按FlightInfo.Origin对FlightInfo进行分组,然后按FlightInfo.DepartureDelay对每个分组进行平均,然后显示平均延迟最高的10个分组,但除了分组之外,我完全被困在如何进一步进行的问题上

提前感谢您的帮助


以下是我能够回答的先前问题之一的示例:

Q:航班的加权到达延迟是其到达延迟除以距离。马萨诸塞州波士顿外加权到达延迟最大的航班是哪一个

A:

var weighted = (from FlightInfo in Flights
               where FlightInfo.Origin == "Boston MA"
               orderby (FlightInfo.ArrivalDelay / FlightInfo.Distance) descending
               select FlightInfo).Take(1);
你可以这样做

var top10 = Flights.GroupBy(g=>g.Origin) // groupby origin 
                  .OrderByDescending(x=> x.Sum(f=> f.ArrivalDelay / f.Distance))  // Get the weighted delay for each fight and use for ordering.
                  .Select(x=>x.Key)  //Airport or Origin (Modify with what you want)
                  .Take(10)
                  .ToList() ;
你可以这样做

var top10 = Flights.GroupBy(g=>g.Origin) // groupby origin 
                  .OrderByDescending(x=> x.Sum(f=> f.ArrivalDelay / f.Distance))  // Get the weighted delay for each fight and use for ordering.
                  .Select(x=>x.Key)  //Airport or Origin (Modify with what you want)
                  .Take(10)
                  .ToList() ;
最后一个
。选择
参数取决于所需内容

var topTen = flights.
            GroupBy(g => g.Origin).
            Select(g => new { Origin = g.Key, AvgDelay = g.ToList().Average(d => d.DepartureDelay) }).
            OrderByDescending(o => o.AvgDelay).
            Take(10);

最后一个
。选择
参数取决于所需内容。

回答问题的旁注:
Take
返回
IEnumerable
如果需要
T
实例,请使用
First
FirstOrDefault
是,我发现当我首先使用
可以在不使用
foreach
循环的情况下访问属性。谢谢,我以前不明白为什么我不能
Console.WriteLine(weighted.Origin)
。回答问题的旁注:
Take
返回
IEnumerable
如果你想要
t
实例,请使用
First
FirstOrDefault
是,我发现当我首先使用
可以在不使用
foreach
循环的情况下访问属性。谢谢,我以前不明白为什么我不能
Console.WriteLine(weighted.Origin)
。谢谢,这是我问题的完整解决方案。既然我是一个新手,我仍然不能掌握语法,看来我已经跃跃欲试了。我有很多东西要学…你们先用钥匙分组。Linq制作了一个字典,其中key是您分组所依据的键,value是这些对象的列表(与SQL稍有不同)。之后,我们为这些组中的每一个进行选择,在其中创建一个新的匿名对象,该对象具有属性Origin和AvgDelay。Avg delay是该特定键列表中所有对象的平均值。之后,AvgDelay就可以轻松订购了,先取10个。非常感谢。我理解逻辑,但无论我如何尝试,我都无法添加另一个属性来选择。比如说,我也想向Carrier展示一下<代码>选择(g=>new{Origin=g.Key,AvgDelay=g.ToList().Average(d=>d.DepartureDelay),Company=g.ToList()。既然我是一个新手,我仍然不能掌握语法,看来我已经跃跃欲试了。我有很多东西要学…你们先用钥匙分组。Linq制作了一个字典,其中key是您分组所依据的键,value是这些对象的列表(与SQL稍有不同)。之后,我们为这些组中的每一个进行选择,在其中创建一个新的匿名对象,该对象具有属性Origin和AvgDelay。Avg delay是该特定键列表中所有对象的平均值。之后,AvgDelay就可以轻松订购了,先取10个。非常感谢。我理解逻辑,但无论我如何尝试,我都无法添加另一个属性来选择。比如说,我也想向Carrier展示一下<代码>选择(g=>new{Origin=g.Key,AvgDelay=g.ToList().Average(d=>d.DepartureDelay),Company=g.ToList()。它给出了正确但不完整的答案。由于我是新手,我无法自己添加其他属性(出发延迟)。谢谢您的回答。它给出了正确但不完整的答案。由于我是新手,我无法自己添加其他属性(出发延迟)。
var topTen = flights.
            GroupBy(g => g.Origin).
            Select(g => new { Origin = g.Key, AvgDelay = g.ToList().Average(d => d.DepartureDelay) }).
            OrderByDescending(o => o.AvgDelay).
            Take(10);