2013-04-12 183 views
3

我想知道如何按月分組一些數據並總結一個字段。 例如,我有一個MyObjects(DateTimeField, AmountField)的列表。 我想按DateTimeField分組,但不是整個日期,只是按月份,然後爲每個月總計AmountFieldLinq分組日期(月)

我不知道爲什麼objectgrouped爲空?

IEnumerable<MyObject> objectList= GetMyObject(); 

    var ObjectGrouped = objectList.GroupBy(l => l.ObjectDate.GetValueOrDefault().Month) 
          .Select(lg => 
           new 
           { 
            CurrentMonth = lg.Key, 
            Total = lg.Sum(w => w.ObjectAmount) 
           }); 

ObjectDate  ObjectAmount 

1/1/2013    3.3 
3/1/2013    6.9 
13/2/2013   5 
3/4/2013    3.6 
13/4/2013   15.2 
+1

非常相似:http://stackoverflow.com/questions/11574474/linq-get-sum-of-data-group-by-date –

回答

2

試試這個:

List<DateTime> list = new List<DateTime>(); 
var grouppedResult = list.GroupBy(x => x.Month); 
+0

我沒有字段月,我只有一個字段類型DateTime,但我只想按月分組,然後總結每個月的所有金額。 – user2112420

+0

class MyModel {public DateTime Time {get;組; }} List list ... list.GroupBy(x => x.Time.Month); –

+0

我不知道爲什麼我不能這樣做,順便說一下DateTime是可空的,是因爲這樣嗎? – user2112420

1
var groups = list.GroupBy(l => l.DateTimeField.Year * 12 + l.DateTimeField.Month) 
       .Select(g => new { 
           Month=g.First().DateTimeField, 
           Sum=g.Select(a=>a.AmountField).Sum() 
          }) 
       .ToList(); 
+0

我不知道爲什麼我沒有得到任何關於這個組是什麼,這是空的,我的列表有值... – user2112420

4

我想通過 「月」 你的意思是 「年份和月份」:

要忽略空值:

var query = myList.Where(i => i.DateTimeField.HasValue) 
        .GroupBy(i => i.DateTimeField.Value.Month) 
        .Select(g => new { 
          Month=g.Key, 
          Total=g.Sum(i=>i.AmountField) 
         }); 

把null val在一個單獨的桶的UE( 「0」 月):

var query = myList.GroupBy(i => i.DateTimeField.HasValue ? i.DateTimeField.Value.Month : 0) 
        .Select(g => new { 
          Month=g.Key, 
          Total=g.Sum(i=>i.AmountField) 
         }); 
+0

不,只是一個月,因爲在我得到所有來自當年的數據。但我不能做DateTime.Month,我認爲是因爲它是可空的,我該怎麼辦?謝謝 – user2112420

+0

你想如何處理空值?他們是在自己的桶裏還是被忽略? –

+0

這只是一個Model和DataBase的東西,但它在數據庫上始終不爲空。 – user2112420