📜  如何按日期拆分列表c#(1)

📅  最后修改于: 2023-12-03 15:24:47.416000             🧑  作者: Mango

如何按日期拆分列表c#

在实际开发中,我们经常需要按照日期对数据进行分类。对于日期列表,我们可以使用Linq进行有效地分组。在本文中,我们将讨论如何使用C#中的Linq按日期拆分列表。

引用命名空间

在使用Linq进行日期拆分之前,需要引用命名空间System.Linq。

using System.Linq;
创建数据

为了演示按日期拆分列表,我们需要创建一个包含日期属性的模型。

public class DataModel
{
    public DateTime Date { get; set; }
    public string Name { get; set; }
}

然后使用以下代码创建一个更大的数据列表。

List<DataModel> dataList = new List<DataModel>(); 
dataList.Add(new DataModel() {Date = new DateTime(2021, 1, 1), Name = "A"});
dataList.Add(new DataModel() {Date = new DateTime(2021, 1, 1), Name = "B"});
dataList.Add(new DataModel() {Date = new DateTime(2021, 1, 2), Name = "C"});
dataList.Add(new DataModel() {Date = new DateTime(2021, 1, 3), Name = "D"});
dataList.Add(new DataModel() {Date = new DateTime(2021, 1, 3), Name = "E"});

这会创建以下数据列表:

| Date | Name | | ---- | ---- | | 2021-1-1 | A | | 2021-1-1 | B | | 2021-1-2 | C | | 2021-1-3 | D | | 2021-1-3 | E |

使用Linq拆分列表

使用Linq按日期拆分列表只需要一行代码:

var groupedData = dataList.GroupBy(x => x.Date).ToList();

这将按日期拆分数据,返回一个IEnumerable<IGrouping<DateTime, DataModel>>类型的对象。在我们的例子中,返回的列表将有3个元素,如下所示。

| Key | Items | | --- | ----- | | 2021-1-1 | {A}, {B} | | 2021-1-2 | {C} | | 2021-1-3 | {D}, {E} |

可以使用foreach循环遍历返回的结果进行后续处理,如将数据分别存储到不同的文件中或者在网格中显示。

下面是完整的代码块,演示如何使用Linq按日期拆分列表:

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

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<DataModel> dataList = new List<DataModel>();
            dataList.Add(new DataModel() { Date = new DateTime(2021, 1, 1), Name = "A" });
            dataList.Add(new DataModel() { Date = new DateTime(2021, 1, 1), Name = "B" });
            dataList.Add(new DataModel() { Date = new DateTime(2021, 1, 2), Name = "C" });
            dataList.Add(new DataModel() { Date = new DateTime(2021, 1, 3), Name = "D" });
            dataList.Add(new DataModel() { Date = new DateTime(2021, 1, 3), Name = "E" });

            var groupedData = dataList.GroupBy(x => x.Date).ToList();
            foreach (var group in groupedData)
            {
                Console.WriteLine("Key: " + group.Key.ToShortDateString());
                foreach (var item in group)
                {
                    Console.WriteLine("\t" + item.Name);
                }
            }

            Console.ReadLine();
        }
    }

    public class DataModel
    {
        public DateTime Date { get; set; }
        public string Name { get; set; }
    }
}

输出结果:

Key: 2021/1/1
        A
        B
Key: 2021/1/2
        C
Key: 2021/1/3
        D
        E