📅  最后修改于: 2023-12-03 15:24:47.416000             🧑  作者: Mango
在实际开发中,我们经常需要按照日期对数据进行分类。对于日期列表,我们可以使用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按日期拆分列表只需要一行代码:
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