c# - 使用 LINQ 从子列表中选择最大值

标签 c# linq

如何编写一个 LINQ 查询,该查询将返回具有最大日期和该日期的最大值的“值”类型的行。它应该是 name = "Correct"

我在最后写了一个查询,它起作用了,只是想找到一个正确的方法。

提前致谢

public class MeasurePoint
{
    public int No { get; set; }
    public string Weight { get; set; }
    public List<Values> Vals { get; set; }
}

public class Values
{
    public string Name { get; set; }
    public int Val { get; set; }
    public DateTime Date { get; set; }
}

public static class Test
{
    public static void Calc()
    {
        var mps = new List<MeasurePoint>();

        mps.Add(new MeasurePoint()
        {
            No = 1,
            Vals = new List<Values>()
            {
                new Values(){Date = DateTime.Now.Date.AddDays(1), Name = "testas", Val = 1},
                new Values(){Date = DateTime.Now.Date.AddDays(2), Name = "testas", Val = 5},
                new Values(){Date = DateTime.Now.Date, Name = "testas", Val = 15}
            }});
        mps.Add(new MeasurePoint()
        {
            No = 2,
            Vals = new List<Values>()
            {
                new Values(){Date = DateTime.Now.Date, Name = "testas", Val = 11},
                new Values(){Date = DateTime.Now.Date.AddDays(2), Name = "Correct", Val = 55},
                new Values(){Date = DateTime.Now.Date, Name = "testas", Val = 15}
            }
        });
        mps.Add(new MeasurePoint()
        {
            No = 3,
            Vals = new List<Values>()
            {
                new Values(){Date = DateTime.Now.Date.AddDays(1), Name = "testas", Val = 111},
                new Values(){Date = DateTime.Now.Date.AddDays(2), Name = "testas", Val = 52},
                new Values(){Date = DateTime.Now.Date, Name = "testas", Val = 15}
            }
        });

        mps.Add(new MeasurePoint()
        {
            No = 4,
            Vals = new List<Values>()                      
        });

        var x = mps.ElementAt(0).Vals.Union(mps.ElementAt(1).Vals).Union(mps.ElementAt(2).Vals);
        var z = x.Where(p => p.Date == x.Max(d => d.Date)).MaxBy(t=>t.Val);

        //One more way I've found
        var ttt = mps.SelectMany(p => p.Vals).GroupBy(t=>t.Date).MaxBy(r=>r.Key).MaxBy(g=>g.Val);
    }

最佳答案

var max = mps.SelectMany(x => x.Vals)
    .Aggregate((a, x) => (x.Date > a.Date) ||
                         ((x.Date == a.Date) && (x.Val > a.Val)) ? x : a);

关于c# - 使用 LINQ 从子列表中选择最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4344730/

相关文章:

c# - 如何从字符串中获取html元素?

c# - 使用 System.Linq.Dynamic.Core 查询具有成员字典的对象列表时无法获得多个结果

c# - 如何从 linq 查询中提取特定值?

c# - 使用 LINQ to XML 遍历 HTML 表

c# - 创建一个下拉列表,其中包含复选框

c# - 编译 C++ 源代码以在 Windows 应用商店应用程序 (Windows 8) 中使用它们

linq - 按日期过滤查询

sql - 多组列计数Linq

c# - 使用行值作为列合并表 LINQ C# SQL

c# - 如何使用 Entity Framework 从动态对象集 <t> 中动态获取对象 T 的属性?