在示例中
itemList
是一个列表
Item
s包含
ItemId
类型
int
,
ItemDate
类型
DateTime
和
ItemStatus
类型
string
.
此代码需要
期满
项目(
ItemStatus == "Expired"
)与
最大日期
对于每一个
身份证件
(
项目ID
)并将这些元素放置到
maxDateForEachExpiredItem
列表。
itemList.GroupBy(item => item.ItemId).ToList()
.ForEach(itemGroup => maxDateForEachExpiredItem.Add(
itemGroup.ToList()
.Where(itemGroupElement => itemGroupElement.ItemStatus == "Expired")
.OrderByDescending(itemGroupElement => itemGroupElement.ItemDate)
.FirstOrDefault()));
为了计算日期为的此类项目的数量
"13/11/2020"
maxDateForEachExpiredItem.Where(item => item.ItemDate == DateTime.Parse("11/13/2020")).Count()
通知中
DateTime.Parse("11/13/2020")
日期格式为
月/日/年
.
说明:
1.
itemList
按以下方式分组
项目ID
这些项目组被转换为列表,以便迭代它们。
itemList.GroupBy(item => item.ItemId).ToList()
2.
遍历每个元素(按以下方式分组的项目
项目ID
)部分列表
1.
并在列表中添加一些内容
每个过期项目的最大日期
.
.ForEach(itemGroup => maxDateForEachExpiredItem.Add(
3.
按以下方式分组的项目
项目ID
转换为列表,以便在组中迭代。
itemGroup.ToList()
4.
从项目组中,按以下方式分组
项目ID
,将物品带到
项目状态
是
Expired
.
.Where(itemGroupElement => itemGroupElement.ItemStatus == "Expired")
5.
按以下方式订购这些项目
项目日期
,从最新日期开始。
.OrderByDescending(itemGroupElement => itemGroupElement.ItemDate)
6.
最后,从这个有序列表中取出第一个项目。
.FirstOrDefault()));
这是整个例子。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp10
{
class Program
{
static void Main(string[] args)
{
List<Item> itemList = new List<Item>
{
new Item(1, "01/05/2015", "Expired"),
new Item(1, "01/06/2015", "Expired"),
new Item(1, "01/12/2020", "Active"),
new Item(2, "01/03/2015", "Expired"),
new Item(2, "01/07/2019", "Expired"),
new Item(2, "01/10/2020", "Active"),
new Item(2, "13/11/2020", "Expired"),
new Item(3, "16/08/2003", "Expired"),
new Item(3, "19/05/2017", "Expired"),
new Item(3, "13/11/2020", "Expired"),
new Item(3, "31/12/2020", "Active")
};
List<Item> maxDateForEachExpiredItem = new List<Item>();
itemList.GroupBy(item => item.ItemId).ToList()
.ForEach(itemGroup => maxDateForEachExpiredItem.Add(
itemGroup.ToList()
.Where(itemGroupElement => itemGroupElement.ItemStatus == "Expired")
.OrderByDescending(itemGroupElement => itemGroupElement.ItemDate)
.FirstOrDefault()));
Console.WriteLine("Max date for each expired item:\n");
foreach (var item in maxDateForEachExpiredItem)
{
Console.WriteLine(item);
}
Console.WriteLine("\nNumber of items where date is 13/11/2020: " +
$"{maxDateForEachExpiredItem.Where(item => item.ItemDate == DateTime.Parse("11/13/2020")).Count()}");
Console.ReadLine();
}
private class Item
{
public int ItemId { get; set; }
public DateTime ItemDate { get; set; }
public string ItemStatus { get; set; }
public Item(int id, string date, string status)
{
ItemId = id;
string[] dateParts = date.Split('/');
ItemDate = new DateTime(int.Parse(dateParts[2]), int.Parse(dateParts[1]), int.Parse(dateParts[0]));
ItemStatus = status;
}
public override string ToString()
{
return $"ItemId = {ItemId}, ItemDate = {ItemDate.ToString("dd/MM/yyyy")}, ItemStatus = {ItemStatus}";
}
}
}
}
结果