2014-09-03 4 views
-3

Спасибо, прости, но я очень новичок. Позвольте мне объяснить это подробно: у меня есть таблица «TheTable» и имеет два столбца «Date» в DateTime и «Value» в двойном. То, что я хочу в итоге: 1.check какая дата минимум 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' ?? что ты уже испробовал? Каков ваш класс-макет? –

+0

Можете ли вы показать код? Являются ли ваши значения в строках столбца «Дата» или DateTime? – sr28

+0

Если вы возьмете целочисленное деление месяца на 8 и добавьте его в год, он даст каждой группе уникальный ключ. –

ответ

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

Не уверен в ответе, потому что вопрос не совсем ясен, но это сумма всего свойства «Значение» вашего списка, свойство «Дата» находится между датой firstDate и датой LastDate.

+0

Не могли бы вы добавить описание вашего ответа? –

+0

здесь вы идете! (я ожидал более подробной информации о владельце сообщения, чтобы разместить больше деталей, но независимо ...) –

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

Смежные вопросы