0

当我多年来最大化时,如何选择最大值所属的月份?

请考虑以下代码:

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 在这里是否更灵活。

4

3 回答 3

1

这就是解决方案。但是,如果有两个不同Data_Point的 s 具有相同的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();

您可以将最后一行更改为具有MonthandYearMax(Value)唯一:

   select new { grp.Year, grp.Month, MaxValueOfTheYear = grp.Month,grp.Value };
于 2013-10-27T16:34:05.670 回答
0
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();
于 2013-10-27T16:32:59.527 回答
0

首先,在 SQL 中,您可以按一列分组并使用 min、max、average 选择其他列。

在 LINQ 中,您可以执行以下操作:

var maxMonthPerYear = Data
    .GroupBy(d => d.Year)
    .Select(grp => new { Y = grp.Key, M = grp.Max(grp => grp.Month) });
于 2013-10-27T16:42:16.890 回答