2011-06-11 70 views
2

我有一个气象站的数据记录表,从中查询结果到WPF ListBoxLINQ通过相应的时间字段查找最大/最小值

表结构是:

  • 日期
  • 时间
  • 临时
  • 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), 
       };  

不过,我想获得的最高温度和最低温度的相应时间,即

TimeMax = ..... 
TimeMin = ..... 

我GOOGLE和GOOGLE上搜索,但发现没有什么用处。

回答

0
let maxTemp = c.Max(c=>c.Temp) 
let minTemp = c.Min(c=>c.Temp) 
select new { 
    LogDate = g.Key, 
    MaxTemp = maxTemp, 
    MinTemp = minTemp, 
    MaxTime = g.FirstOrDefault(c=>c.Temp = maxTemp).Time, 
    MinTime = g.FirstOrDefault(c => c.Temp = minTemp).Time, 
    Rain = g.Max(c => c.Rain_today), 
     };  
+0

感谢您的回复家伙。然而,我无法让他们中的任何一个人工作。尽管如此,我认为我没有说清楚。我在每日最大和最小温度的相应LogTime(同一行)之后,这是通过LogDate通过Group获得的。 – Corretto 2011-06-11 04:18:47

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), 
     }; 

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), 
     }; 
+0

我是第二个选项的风扇。阅读更逻辑 – 2011-06-11 03:24:18

+0

感谢这个亚历克斯,这工作得很好。只需要将LogDate更改为LogTime :-) – Corretto 2011-06-11 04:41:13