2014-08-31 193 views
0

我有兩個對象,一個是汽車對象,另一個是我用來記錄有多少汽車物體正在輪班並記錄這些汽車具有哪些屬性。Linq分組和平均值

public class Car 
{ 
    public int Id { get; set; } 
    public bool OnShift { get; set; } 
    public bool HasExtraBaggageSpace { get; set; } 


} 

public class Log 
{ 
    public DateTime TimeStamp { get; set; } 
    public int CarId { get; set; } 
    public bool HasExtraBaggageSpace { get; set; } 

} 

每五分鐘應用程序選擇所有的汽車上移和信息寫入日誌對象,並將其插入到一個列表記錄。

經過三週的記錄,我現在想返回一個反映最近三週平均值的數字。例如: 在星期四的14:00,我可以期待有多少輛HasExtraBaggageSpace。

公共類對myApp {

public class AverageReturnArgs 
    { 
     public int Hour { get; set; } 
     public int Minute { get; set; } 
     public int Count { get; set; } 

    } 



    public AverageReturnArgs GetAverage(List<Log> logs, DateTime TimeReq) 
    { 
     int hour = TimeReq.Hour; 
     int min = TimeReq.Minute; 
     var average = logs.GroupBy(grpByHourMin => new 
     { 
      hour = grpByHourMin.TimeStamp.Hour, 
      min = grpByHourMin.TimeStamp.Minute 
     }).Select(av => new AverageReturnArgs() 
     { 
      Hour = av.Key.hour, 
      Minute = av.Key.min, 
      Count = av.Average(x => x.HasExtraBaggageSpace) 
     }); 
    } 
} 

這產生一個編譯錯誤。 Count = av.Average(x => x.HasExtraBaggageSpace)

任何想法我可以做到這一點?

回答

2

你會如何計算布爾值的平均值? 我認爲Count聚合應你正在尋找的東西:

Count = av.Count(x => x.HasExtraBaggageSpace) 

編輯如果你的意思是計算具有ExtraBaggageSpace車廂的百分比,你可以嘗試這樣的事:

Count = av.Average(x => x.HasExtraBaggageSpace ? 1 : 0) 

使用三元運算符這個表達式將您的布爾值轉換爲一個整數並計算平均值(這將是一個Double)。

EDIT 2

這是你的線路應該是什麼樣子。 計數應該由Double類型組成。

Count = av.Average(x => av.Count(y=>y.HasExtraBaggageSpace)) 

編輯3

確定的邏輯是完全錯誤的:

public AverageReturnArgs GetAverage(List<Log> logs, DateTime TimeReq) 
{ 
    int hour = TimeReq.Hour; 
    int min = TimeReq.Minute; 
    var average = logs 
    .Where(log => log.TimeStamp.Hour == hour && log.TimeStamp.Minute == min) 
    .GroupBy(grp => grp.TimeStamp) 
    .Select(av => new AverageReturnArgs() 
    { 
     Hour = hour, 
     Minute = min, 
     Count = av.Average(x => av.Count(y=>y.HasExtraBaggageSpace)) 
    }); 
} 
+0

我的意思是,在14:00每星期四爲過去三週沒有爲n日誌。其中一些將有HasExtraBaggageSpace和一些不會。如果周1 = 3周2 = 2周3 = 1平均爲2. – Paul 2014-08-31 10:54:33

+0

嗯,我可以,但它很簡單,就像在三個不同時間對布爾屬性進行計數並求平均值一樣。這幾乎是它。只是不能獲得linq語法。如果原始問題模糊,請聯繫。 – Paul 2014-08-31 11:30:13

+0

你可以試試我的編輯2?它首先爲每個組計算具有* ExtraBaggageSpace *的* Logs *的計數,然後計算所有組的平均值。 – Ndech 2014-08-31 11:46:25