[英]How to group by one member and select a second member?
当我超过几年的最大值时,如何选择最大值所属的月份?
请考虑以下代码:
public class Data_Point
{
public int Month { get; set; }
public int Year { get; set; }
public int Value { get; set; }
}
static void Main(string[] args)
{
List<Data_Point> Data = new List<Data_Point>();
Data.Add(new Data_Point() { Month = 0, Year = 0, Value = 99 });
Data.Add(new Data_Point() { Month = 1, Year = 0, Value = 69 });
// Max should relate to one record only.
var Max_Year = (from e in Data
group e by e.Year into y
select new { Month( e => e.Month ), Year = y.Key, Value = y.Max(e => e.Value) }).ToList();
}
我知道我的问题在SQL中不太可能出现,但是我想知道LINQ是否在这里更灵活。
这是解决方案。 但是,如果有两个不同的Data_Point
,它们的Value
等于一年中的最大值,则两者都返回。
var Max_Year =
from d in Data
group d by d.Year into grouped_by_year
let maxOfYear = grouped_by_year.Max(p => p.Value)
from grp in grouped_by_year
where grp.Value == maxOfYear
select grp;
仅具有一个Data_Point
(例如第一个捕获):
var Max_Year =
from d in Data
group d by d.Year into grouped_by_year
select grouped_by_year.OrderByDescending(p=>p.Value).First();
您可以将最后一行更改为仅包含Month
和Year
以及Max(Value)
:
select new { grp.Year, grp.Month, MaxValueOfTheYear = grp.Month,grp.Value };
var Max_Year = (from e in Data
group e by e.Year into y
select new { Month = y.OrderByDescending(d => d.Value).First().Month, Year = y.Key, Value = y.Max(e => e.Value) }).ToList();
首先,在SQL中,您可以按一列分组,并使用最小值,最大值,平均值选择其他列。
在LINQ中,您可以执行以下操作:
var maxMonthPerYear = Data
.GroupBy(d => d.Year)
.Select(grp => new { Y = grp.Key, M = grp.Max(grp => grp.Month) });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.