簡體   English   中英

使用LINQ按日期分組查詢在數據表中填寫缺少的日期

[英]Filling in missing dates in datatable using a linq group by date query

我正在嘗試在數據表中填寫缺少的日期以進行報告。 例如:

數據表收集:

2010-01-01 : 5
2010-01-02 : 4
2010-01-03 : 2
2010-01-05 : 6

但我想要這樣的結果:

2010-01-01 : 5
2010-01-02 : 4
2010-01-03 : 2
2010-01-04 : 0
2010-01-05 : 6

var total = from row in dt2.AsEnumerable() 
            where row.Field<UInt32>("Super Category") == j 
            group row by row.Field<string>("Activation Date") into sales 
            orderby sales.Key 
            select new 
                   { 
                       Name = sales.Key, 
                       CountOfClients = sales.Count() 
                   };

我怎樣才能做到這一點?

這有效:

        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("dt", typeof(DateTime)));
        dt.Columns.Add(new DataColumn("num", typeof(int)));
        dt.Rows.Add(new DateTime(2010, 1, 1), 5);
        dt.Rows.Add(new DateTime(2010, 1, 2), 4);
        dt.Rows.Add(new DateTime(2010, 1, 3), 2);
        dt.Rows.Add(new DateTime(2010, 1, 5), 6);
        dt.Rows.Add(new DateTime(2010, 1, 8), 6);
        dt.Rows.Add(new DateTime(2010, 1, 9), 6);
        dt.Rows.Add(new DateTime(2010, 1, 12), 6);

        DateTime minDT = dt.Rows.Cast<DataRow>().Min(row => (DateTime)row["dt"]);
        DateTime maxDT = dt.Rows.Cast<DataRow>().Max(row => (DateTime)row["dt"]);

        // Create all the dates that should be in table
        List<DateTime> dts = new List<DateTime>();
        DateTime DT = minDT;
        while (DT <= maxDT)
        {
            dts.Add(DT);
            DT = DT.AddDays(1);
        }

        // Find the dates that should be in table but aren't
        var DTsNotInTable = dts.Except(dt.Rows.Cast<DataRow>().Select(row => (DateTime)row["dt"]));

        foreach (DateTime dateTime in DTsNotInTable)
            dt.Rows.Add(dateTime, 0);

        // Order the results collection
        var ordered = dt.Rows.Cast<DataRow>().OrderBy(row => (DateTime)row["dt"]);

        // Create a DataTable object
        DataTable dt2 = ordered.CopyToDataTable();

dt2表將包含的結果,而DateTime通過有序的差距DateTime列。

嘗試這樣的事情。

DateTime startDate = collection.first().date;
DateTime endDate = collection.last().date;

While(startDate < endDate)
{
    // compare if collection date is valid
    startDate.AddDays(1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM