2013-02-22 18 views
0

Я уверен, что есть простой ответ на этот вопрос, но я не могу сказать, что фраза поиска дает правильные результаты.Подсчет экземпляров даты

В моем контроллере, скажем, у меня есть список экземпляров класса x, который, в свою очередь, имеет переменную-член класса y, которая содержит переменную даты. То, что я пытаюсь сделать, - подсчитать количество экземпляров каждой даты, чтобы построить график. Таким образом, все, что я хочу, это массив с 1 строкой для каждой другой даты и подсчет количества раз, когда эта дата произошла.

Любые предложения по наилучшему способу сделать это будут оценены.

+0

пожалуйста перечисляют из класса Defination здесь – Yasser

ответ

4

Похоже, вы хотите что-то подобное.

var countByDate = items.GroupBy(x => x.Invoice.ReceivedDate) // Or whatever 
         .Select(g => new { Date = g.Key, Count = g.Count() }) 
         .OrderBy(pair => pair.Date); 
         .ToArray(); 

LINQ пород :)

0

Использование методов расширения должно помочь. Это лучшее, что я могу сделать, не зная типов, которые у вас есть:

ListOfx.Select(x => x.ClassY.Date) 

Предыдущая строка предоставит вам все даты. Затем вы можете использовать GroupBy для группировки их по их значению. Это должно дать вам список списков.

ListOfx.Select(x => x.ClassY.Date).GroupBy(x => x.Date) 

Я думаю, что это должно сработать. На данный момент я не могу попробовать код.

+0

ему нужно подсчитать частоту любых дат , а не просто получить все из них. –

3

Вы можете использовать Linq-х Enumerable.GroupBy:

var dayGroups = listX.GroupBy(x => x.Y.DateTimeVar.Date) 
        .Select(g => new { Day = g.Key, Count = g.Count() }) 
        .ToArray(); 

Теперь вы все, что вам нужно, дата и встречаемости:

foreach(var dayGroup in dayGroups) 
{ 
    Console.WriteLine("Day: {0} Count: {1}", dayGroup.Day.ToString(), dayGroup.Count); 
} 

Предполагая, что DateTimeVar является собственностью и вы хотите сгруппировать в день ,

0

Код может быть неуклюжим, но это должно работать для вас:

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace App 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<X> xs = new List<X> 
      { 
       new X { Y = new Y {D = DateTime.Now}}, 
       new X { Y = new Y {D = DateTime.Now}}, 
       new X { Y = new Y {D = DateTime.Now}}, 
      }; 

      IEnumerable<DateTime> ds = xs.Select(x => x.Y.D).Distinct(); 

      var q = from d in ds 
        select new 
        { 
         D = d, 
         Count = xs.Count(x => x.Y.D.Equals(d)) 
        }; 

      foreach (var i in q) 
      { 
       Console.WriteLine(i); 
      } 
     } 

     class X 
     { 
      public Y Y { get; set; } 
     } 

     class Y 
     { 
      public DateTime D { get; set; } 
     } 
    } 
} 
Смежные вопросы