0

我确信对此有一个简单的答案,但我似乎无法通过搜索来获得正确的结果。

在我的控制器中,假设我有一个类 x 的实例列表,它又具有一个 y 类的成员变量,其中包含一个日期变量。我要做的是计算每个日期有多少实例,以构建图表。所以我想要的只是一个数组,每个不同的日期有 1 行,以及该日期发生的次数。

任何有关执行此操作的最佳方法的建议将不胜感激。

4

4 回答 4

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 摇滚 :)

于 2013-02-22T13:34:22.587 回答
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是属性,并且您想按天分组。

于 2013-02-22T13:34:01.290 回答
0

使用扩展方法应该会有所帮助。在不知道您拥有的类型的情况下,这是我能做的最好的事情:

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

上一行将为您提供所有日期。然后您可以使用 GroupBy 按它们的值对它们进行分组。这应该给你一个列表列表。

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

我认为这应该有效。我目前无法尝试该代码。

于 2013-02-22T13:29:12.737 回答
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; }
        }
    }
}
于 2013-02-22T13:43:44.227 回答