C# 如何从报告中获取最长时间

C# 如何从报告中获取最长时间,c#,linq,C#,Linq,我想过滤我的报告,只显示有最长时间的那一行 首先我使用 enddate=fr.First().enddate 但它给我的第一个值不是最长时间 我试着用 endDate=fr.Max().endDate 但失败了 尝试fr.OrderByDescending(x=>x.EndDate).First().EndDate尝试fr.OrderByDescending(x=>x.EndDate).First().EndDate如果您只想获取最大日期,可以使用LINQ max方法。这与您尝试的类似,但您需要

我想过滤我的报告,只显示有最长时间的那一行 首先我使用

enddate=fr.First().enddate

但它给我的第一个值不是最长时间 我试着用

endDate=fr.Max().endDate


但失败了

尝试
fr.OrderByDescending(x=>x.EndDate).First().EndDate
尝试
fr.OrderByDescending(x=>x.EndDate).First().EndDate
如果您只想获取最大日期,可以使用LINQ max方法。这与您尝试的类似,但您需要传入要比较的属性以获得其最大值

fr.Max(x => x.EndDate);
使用
Max
而不是
OrderByDescending
具有性能优势,因为您只从列表中获取最大值,而避免对整个列表进行排序


如果您想获得具有最大结束日期的整个对象,请检查以下答案:-它有多种方法来解决您的问题。

如果您只想获得最大日期,可以使用LINQ max方法。这与您尝试的类似,但您需要传入要比较的属性以获得其最大值

fr.Max(x => x.EndDate);
使用
Max
而不是
OrderByDescending
具有性能优势,因为您只从列表中获取最大值,而避免对整个列表进行排序


如果要获得具有最大结束日期的整个对象,请选中此答案:-它有多种方法来解决您的问题。

如果要获得具有最新日期的数据行,则:

var reqData = (from o in fr
               orderby o.EndDate descending
               select o).FirstOrDefault();
var latestDate = fr.Max(d => d.EndDate);
如果您想要最新日期,则:

var reqData = (from o in fr
               orderby o.EndDate descending
               select o).FirstOrDefault();
var latestDate = fr.Max(d => d.EndDate);

如果希望数据行具有最新日期,则:

var reqData = (from o in fr
               orderby o.EndDate descending
               select o).FirstOrDefault();
var latestDate = fr.Max(d => d.EndDate);
如果您想要最新日期,则:

var reqData = (from o in fr
               orderby o.EndDate descending
               select o).FirstOrDefault();
var latestDate = fr.Max(d => d.EndDate);
我想过滤我的报告,只显示有最长时间的那一行

因此,您的报告是一系列行,其中每一行都有一个属性EndTime。您需要的是唯一一个EndTime值最大的行

class Row
{
    public DateTime EndTime {get; set;}
    ... // other properties
}

IEnumerable<Row> report = ...
如果希望在最终结果中包含完整的行,则不必执行Select。如果您只想要结束时间:

.Select(row => row.EndTime).FirstOrDefault();
如果数据库管理系统必须为您执行此操作,则此解决方案是最好的。DBMS针对排序进行了优化。但是,如果您的本地进程必须这样做,那么如果您只使用第一个元素,那么对所有元素进行排序将是一种浪费。在这种情况下,考虑使用

的重载之一。 最简单的重载将第一行定义为EndTime最大的一行。将EndTime最大的行与其他行进行比较,并保留EndTime最大的行

如果您的报告根本没有行,您必须决定结果是什么

Row rowWithLargestEndTime = report.Aggregate(
    // parameter accumulator function: 
    // compare the largest found EndTime with the next EndTime
    // keep the one with the largest EndTime
    (rowWithLargestEndTime, nextRow) => (rowWithLargesEndTime.EndTime < nextRow.EndTime) ?
     nextRow :
     rowWithLargestEndTime);
行WITHLARGESTENDTIME=report.Aggregate(
//参数累加器功能:
//将找到的最大结束时间与下一个结束时间进行比较
//保留EndTime最大的一个
(rowWithLargestEndTime,nextRow)=>(rowWithLargestEndTime.EndTime
好的是聚合只需枚举序列一次。OrderBy将枚举多次

我想过滤我的报告,只显示有最长时间的那一行

因此,您的报告是一系列行,其中每一行都有一个属性EndTime。您需要的是唯一一个EndTime值最大的行

class Row
{
    public DateTime EndTime {get; set;}
    ... // other properties
}

IEnumerable<Row> report = ...
如果希望在最终结果中包含完整的行,则不必执行Select。如果您只想要结束时间:

.Select(row => row.EndTime).FirstOrDefault();
如果数据库管理系统必须为您执行此操作,则此解决方案是最好的。DBMS针对排序进行了优化。但是,如果您的本地进程必须这样做,那么如果您只使用第一个元素,那么对所有元素进行排序将是一种浪费。在这种情况下,考虑使用

的重载之一。 最简单的重载将第一行定义为EndTime最大的一行。将EndTime最大的行与其他行进行比较,并保留EndTime最大的行

如果您的报告根本没有行,您必须决定结果是什么

Row rowWithLargestEndTime = report.Aggregate(
    // parameter accumulator function: 
    // compare the largest found EndTime with the next EndTime
    // keep the one with the largest EndTime
    (rowWithLargestEndTime, nextRow) => (rowWithLargesEndTime.EndTime < nextRow.EndTime) ?
     nextRow :
     rowWithLargestEndTime);
行WITHLARGESTENDTIME=report.Aggregate(
//参数累加器功能:
//将找到的最大结束时间与下一个结束时间进行比较
//保留EndTime最大的一个
(rowWithLargestEndTime,nextRow)=>(rowWithLargestEndTime.EndTime

好的是聚合只需枚举序列一次。OrderBy将枚举多次。

您想要答案还是答案?不管怎样,让你的帮助变得容易些:。回答我想你想要一个答案,还是一个答案?无论如何,让它更容易帮助您:。C#答案我想要感谢,但它给出的错误无法隐式转换为System.DateTime我尝试了这个答案,结果成功了,EndDate属性是什么数据类型?我想您的意思是
EndDate=fr.OrderByDescending(x=>x.EndDate)。First().EndDate
谢谢,但它给出的错误无法隐式转换为System.DateTime我尝试了这个答案,它成功了,EndDate属性是什么数据类型?我想你的意思是
EndDate=fr.OrderByDescending(x=>x.EndDate).First().EndDate