C# 获取对象列表中的最高日期,并获取其类的另一个属性

C# 获取对象列表中的最高日期,并获取其类的另一个属性,c#,C#,我有一门课是这样的: class DateTimeProperty { public string Id { get; set; } public DateTime TDateTime { get; set; } } 我是这样使用它的: List<DateTimeProperty> dtp = new List<DateTimeProperty>(); var item = new DateTimeProperty { Id = id, TDa

我有一门课是这样的:

class DateTimeProperty
{
   public string Id { get; set; }
   public DateTime TDateTime { get; set; }
}
我是这样使用它的:

List<DateTimeProperty> dtp = new List<DateTimeProperty>();
var item = new DateTimeProperty
{
   Id = id,
   TDateTime = transactioDateTime
};
dtp.Add(item);
然后我得到了这样的最长日期

maxDate = dtp.Max(x => x.TDateTime);
但我需要的是有日期的身份证。你能告诉我怎么弄到这个吗?整个代码如下:

static void Main(string[] args)
{
    List<DateTimeProperty> dtp = new List<DateTimeProperty>();
    var format = "dd/MM/yyyy HH:mm:ss.fff";
    var folderPath = @"I:\LCS Transactions";
    DirectoryInfo di = new DirectoryInfo(folderPath);
    List<DateTime> dateTimeArray = new List<DateTime>();
    DateTime maxDate;
    FileInfo[] fi = di.GetFiles();

    foreach(FileInfo f in fi)
    {
        var file = GetHeader(f.FullName);

        if (!file.Contains(".txt"))
        {
            if (file.Contains("_"))
            {
                var spike = file.Split('_');
                var transactionType = spike[0];
                var dateTime = spike[3];
                var id = spike[4];
                var year = dateTime.Substring(0, 4);
                var month = dateTime.Substring(4, 2);
                var day = dateTime.Substring(6,2);
                var hour = dateTime.Substring(8, 2);
                var minute = dateTime.Substring(10, 2);
                var seconds = dateTime.Substring(12, 2);
                var miiliseconds = dateTime.Substring(14, 3);
                var stringDate = $@"{day}/{month}/{year} {hour}:{minute}:{seconds}.{miiliseconds}";

                DateTime transactioDateTime = DateTime.ParseExact(stringDate, format, CultureInfo.InvariantCulture);

                var item = new DateTimeProperty
                {
                    Id = id,
                    TDateTime = transactioDateTime
                };

                Console.WriteLine(transactioDateTime);

                //dateTimeArray.Add(transactioDateTime);
                dtp.Add(item);
            }
        }
    }

            maxDate = dtp.Max(x => x.TDateTime);
            Console.WriteLine("=====================");
            Console.WriteLine(maxDate);

            Console.ReadLine();
}
static void Main(字符串[]args)
{
List dtp=新列表();
var format=“dd/MM/yyyy HH:MM:ss.fff”;
var folderPath=@“I:\LCS事务”;
DirectoryInfo di=新的DirectoryInfo(folderPath);
List dateTimeArray=新列表();
DateTime-maxDate;
FileInfo[]fi=di.GetFiles();
foreach(fi中的文件信息f)
{
var file=GetHeader(f.FullName);
如果(!file.Contains(“.txt”))
{
if(file.Contains(“”))
{
var spike=file.Split(“”);
var transactionType=峰值[0];
var dateTime=峰值[3];
var id=峰值[4];
var year=dateTime.Substring(0,4);
var month=dateTime.Substring(4,2);
var day=日期时间子字符串(6,2);
var hour=dateTime.Substring(8,2);
var minute=dateTime.Substring(10,2);
var seconds=dateTime.Substring(12,2);
var miiliseconds=dateTime.Substring(14,3);
var stringDate=$@“{day}/{month}/{year}{hour}:{minute}:{seconds}.{miiliseconds}”;
DateTime transactioDateTime=DateTime.ParseExact(stringDate、format、CultureInfo.InvariantCulture);
var item=new DateTimeProperty
{
Id=Id,
TDateTime=transactioDateTime
};
Console.WriteLine(transactioDateTime);
//添加(transactioDateTime);
dtp.添加(项目);
}
}
}
maxDate=dtp.Max(x=>x.TDateTime);
Console.WriteLine(“===============================”);
控制台写入线(maxDate);
Console.ReadLine();
}

您只需使用降序
OrderByDescending
,然后使用
first或default

var result = dtp.OrderByDescending(x => TDateTime).FirstOrDefault();

if(result != null)
   Console.WriteLine(result.Id);

其他资源

按降序排列序列的元素

返回序列的第一个元素,如果没有,则返回默认值 元素被找到


只需按日期订购,并从第一项中获取Id属性:

var maxDateId = dtp
    .OrderByDescending(x => x.TDateTime)
    .FirstOrDefault()?.Id;

如果序列为空,
FirstOrDefault
可以返回
null
,这就是我使用null条件运算符(
?。
)访问
Id
属性的原因。如果序列为空,
maxDateId
将为空,因此您可能必须检查此项,以使代码免受
NullReferenceException

的影响。您可以通过使用LINQ方法避免为列表排序付出性能代价



更新。此处有更多解决方案:。

如果有两个或多个项目具有相同的最大
TDateTime
值,是否会发生任何特殊情况?
var maxDateItem = dtp.Aggregate((DateTimeProperty)null, (max, item) =>
{
    return max == null || item.TDateTime > max.TDateTime ? item : max;
});
var maxDateItemId = maxDateItem.Id; // Will throw if the list has no elements