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

コードはぎこちないかもしれませんが、これはうまくいくはずです:

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 に答える
0

拡張メソッドを使用すると役立つはずです。これは、あなたが持っているタイプを知らなくてもできる最善の方法です:

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

前の行にはすべての日付が表示されます。次に、GroupBy を使用して、値でグループ化できます。これにより、リストのリストが表示されます。

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

これはうまくいくはずだと思います。現時点ではコードを試すことができません。

于 2013-02-22T13:29:12.737 に答える