2014-09-03 66 views
-3

謝謝大家,我很抱歉,但我很初學。讓我詳細解釋一下:我有一張表「theTable」,並在DateTime中有兩列「Date」和在double中有兩個「Value」列。 我想結果是什麼:1,檢查其日期爲最低2以此爲firstdat按Linq分類範圍

我都試過,但似乎不工作

from cf in theTable. 
group t by t.Month.Month/8 + t.Month.Year into g 

select new { sum = g.Sum(x=>x.Amount) ,year = g.Key} 
+1

'.GroupBy'有一些關鍵字,例如'arg => arg.MyDateTime.Year' ??你試過什麼了?你的班級佈局是什麼? – 2014-09-03 11:35:05

+0

你能展示一些代碼嗎?您的'日期'列字符串或日期時間中的值? – sr28 2014-09-03 11:39:55

+0

如果您將月份的整數除以8並將其添加到年份,則會爲每個組分配一個唯一的密鑰。 – 2014-09-03 11:47:16

回答

-1
myList.Where(x=> x.Date < lastDate && x.Date > firstDate).Sum(x=>x.Value) 

不知道答案,因爲的問題不是很清楚,但這是您的列表中屬性「值」的所有屬性「值」之間的日期firstDate和日期LastDate之間的總和。

+0

您能否在您的回答中添加一些描述? – 2014-09-03 12:18:56

+0

在這裏你去! (我希望帖子的所有者的更多細節能夠提供更多細節,但是無論如何...) – 2014-09-03 12:44:54

0

你可以嘗試做這樣的事情:

private static void Main(string[] args) 
    { 
     var columns = new List<Column>(); 

     var dateRanges = new List<DateRange>() 
     { 
      new DateRange(new DateTime(2013, 09, 03), new DateTime(2014, 09, 03)) 
     }; 

     var result = columns.GroupBy(
      column => dateRanges.FirstOrDefault(dr => dr.IsInRange(column.Date)), 
      (dr, drc) => new KeyValuePair<DateRange, int>(dr, drc.Sum(v => v.Value))); 
    } 

    public struct DateRange 
    { 
     public DateRange(DateTime from, DateTime to) 
      : this() 
     { 
      From = from; 
      To = to; 
     } 

     public bool IsInRange(DateTime date) 
     { 
      return date >= From && date <= To; 
     } 

     public DateTime From { get; private set; } 
     public DateTime To { get; private set; } 
    } 

    public class Column 
    { 
     public int Value { get; set; } 
     public DateTime Date { get; set; } 
    } 
0
theTable.GroupBy(t => t.Date.Month/8 + t.Date.Year) 
.Select(g => g.Sum(x = > x.Value)); 

如果你把範圍8/1991-7/1992例如他們都將在同一組結束了:

8/8 + 1991 = 7/8 + 1992 = 1992

+0

'.GroupBy'需要一個用於密鑰選擇器的'Func 2014-09-03 12:44:32