2016-11-25 123 views
0

我有特定日期購買的訂單列表。我需要將它們全部組成一個日期(在同一天進行購買),然後總結他們。我做了一個類,它看起來像這樣:LINQ羣由日期時間和金額

public class StoreAnalyticOrders 
    { 
     public DateTime OrderDate { get; set; } 
     public float AmountPaid { get; set; } 

    } 

然後是我填這被稱爲「圖形列表列表「有結果...

的LINQ,我試圖執行什麼我剛纔所描述起來有:

var result = GraphList 
     .GroupBy(l => l.OrderDate) 
     .Select(cl => new StoreAnalyticOrders 
     { 
      AmountPaid = cl.Sum(c => c.AmountPaid), 
     }).ToList(); 

但由於某些原因的日期格式錯誤(他們丟失),他們表現出像這樣:

1/1/0001 12:00:00 AM 

,這是訂單日期屬性以前的格式:

11/21/2016 6:05:32 AM 

什麼我錯在這裏做什麼?

編輯:@Ivan Stoev這是你換貨什麼:

var result = GraphList 
        .GroupBy(l => l.OrderDate.Date) 
        .Select(cl => new StoreAnalyticOrders 
        { 
         OrderDate = cl.Key, 
         AmountPaid = cl.Sum(c => c.AmountPaid) 
        }).ToList(); 
+0

第一,你不應該直接按「DateTime」分組。你需要用'l.OrderDate.Date'進行分組,以便它能夠修剪小時,分鐘,秒,毫秒部分。因此您將一天內的所有購買都分組。 –

+0

您忘記閱讀日期,例如'OrderDate = cl.Key,AmountPaid = ...' –

+0

@ M.kazemAkhgary我現在就做到了......伊凡我用你的建議編輯了我的問題......是嗎? – User987

回答

0

不能使用更改日期時間在LINQ到實體查詢,你應該使用DbFunctions

GraphList.GroupBy(gl => DbFunctions.TruncateTime((DateTime)gl.Datetime)). 
Select(gl=> new{ 
    Date = DbFunctions.TruncateTime((DateTime)gl.FirstOrDefault().Datetime), 
    TotalAmountPaid = gl.Sum(x=> x.AmountPaid) 
}).ToList();