2014-09-03 46 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