LINQ使用相应的时间字段查找最大/最小值

Cor*_*tto 2 .net c# linq linq-to-objects linq-to-sql

我有一张来自气象站的数据记录表,我从中查询结果到WPF ListBox.

表结构是:

  • 日期
  • 时间
  • 温度
  • rain_today
  • 湿度
  • 等等

我有一个工作正常的查询:

var q = from c in db.Apr11log
                group c by c.LogDate into g
                orderby g.Key
                select new
                {
                    LogDate = g.Key,
                    MaxTemp = g.Max(c => c.Temp),
                    MinTemp = g.Min(c => c.Temp),                                             
                    Rain = g.Max(c => c.Rain_today),
                };      
Run Code Online (Sandbox Code Playgroud)

但是我想要获得Max Temp和Min Temp的相应时间,即

TimeMax = .....
TimeMin = .....
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索和谷歌搜索,但没有发现任何有用的东西.

Ale*_*Aza 5

var q = from c in db.Apr11log
        group c by c.LogDate into g
        orderby g.Key
        select new
        {
            LogDate = g.Key,
            MaxRow = g.OrderByDescending(c => c.Temp).Select(c => new { c.LogDate, c.Temp }).First(),
            MinRow = g.OrderBy(c => c.Temp).Select(c => new { c.LogDate, c.Temp }).First(),
            Rain = g.Max(c => c.Rain_today),
        };
Run Code Online (Sandbox Code Playgroud)

要么

var q = from c in db.Apr11log
        group c by c.LogDate into g
        orderby g.Key
        let maxRow = g.OrderByDescending(c => c.Temp).First()
        let minRow = g.OrderBy(c => c.Temp).First()
        select new
        {
            LogDate = g.Key,
            MaxTemp = maxRow.Temp,
            MaxTempDate = maxRow.LogDate,
            MinTemp = minRow.Temp,
            MinTempDate = minRow.LogDate,
            Rain = g.Max(c => c.Rain_today),
        };
Run Code Online (Sandbox Code Playgroud)