我确信这个问题有一个简单的答案,但我似乎无法用短语搜索来获得正确的结果。计算日期的实例
在我的控制器中,让我们说我有一个类x的实例列表,它有一个类y的成员变量,它包含一个日期变量。我想要做的是计算每个日期有多少个实例,来构建一个图。所以我想要的就是一个数组,每个不同的日期有一行,以及日期发生次数。
任何建议,最好的方式来做到这一点,将不胜感激。
我确信这个问题有一个简单的答案,但我似乎无法用短语搜索来获得正确的结果。计算日期的实例
在我的控制器中,让我们说我有一个类x的实例列表,它有一个类y的成员变量,它包含一个日期变量。我想要做的是计算每个日期有多少个实例,来构建一个图。所以我想要的就是一个数组,每个不同的日期有一行,以及日期发生次数。
任何建议,最好的方式来做到这一点,将不胜感激。
听起来像你想要这样的东西。
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岩石:)
使用扩展方法应该有所帮助。这是我所能做的最好的,不知道你有什么类型:
ListOfx.Select(x => x.ClassY.Date)
上一行会给你所有的日期。然后你可以使用GroupBy按照它们的值对它们进行分组。这应该给你一个列表清单。
ListOfx.Select(x => x.ClassY.Date).GroupBy(x => x.Date)
我认为这应该工作。我目前无法尝试代码。
他需要计算任何日期的频率,不只是让他们全部。 – 2013-02-22 13:30:00
您可以使用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
是财产,你的一天要组。
的代码可能是笨拙的,但是这应该为你工作:
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; }
}
}
}
请列出类认定中这里 – Yasser 2013-02-22 13:27:27