首页 > 解决方案 > 如何从组中获取第一项并准备数据类对象

问题描述

我有基于DateAndTimeofResultNameof进行排序和分组的数据包列表Packet。并且只选择First项目。

 var packets = new List<Packet>
        {
            new Packet { Name = "P1", Result = new Result { Name = "N1", DateAndTime = new DateTime(2020, 05, 11, 10, 30, 50) }},
            new Packet { Name = "P1", Result = new Result { Name = "N2", DateAndTime = new DateTime(2020, 05, 11, 10, 31, 50) }},
            new Packet { Name = "P2", Result = new Result { Name = "N1", DateAndTime = new DateTime(2020, 05, 11, 10, 32, 50) }},
            new Packet { Name = "P1", Result = new Result { Name = "N2", DateAndTime = new DateTime(2020, 05, 11, 10, 33, 50) }},
            new Packet { Name = "P2", Result = new Result { Name = "N2", DateAndTime = new DateTime(2020, 05, 11, 10, 34, 50) }},
            new Packet { Name = "P1", Result = new Result { Name = "N1", DateAndTime = new DateTime(2020, 05, 11, 10, 35, 50) }}
        };

        var resultData = packets.OrderByDescending(x => x.Result.DateAndTime).GroupBy(x => x.Name).Select(x => x.First());

支持类,

public class Packet
{
    public string Name { get; set; }
    public Result Result { get; set; }
}

public class Result
{
    public string Name { get; set; }
    public DateTime DateAndTime { get; set; }
}

现在我需要从上面准备Data对象resultData

public class Data
{
    public string PacketName { get; set; }
    public DateTime PacketTime { get; set; }
}


var data=new Data
   {
     PacketName = resultData.???

    }

这该怎么做?还有OrderByDescending什么时候申请?

标签: c#

解决方案


List<Data> datas = resultData.Select(x => new Data (){ PacketName = x.Name, PacketTime = x.Result.DateAndTime }).ToList(); 

或者

List<Data> datas = packets.OrderByDescending(x => x.Result.DateAndTime)
                          .GroupBy(x => x.Name) 
                          .Select(x => new Data() { PacketName = x.First().Name, PacketTime = x.First().Result.DateAndTime })
                          .ToList();

推荐阅读