访问LINQ结果 - 什么是更好的方法?

时间:2013-02-18 14:49:25

标签: c# linq

所以我需要使用API​​调用中的一组数据。我过滤以纠正子集并使用下面的代码访问特定字段。是否有更好的方法来获取currentDatebeforeCurrentDate

DateTime beforeCurrentDate, currDate;

var curr = from c in GlobalResults<FinancialYear>.Results
    where c.IsCurrentYear = true
        select c;

var prev = from c in GlobalResults<FinancialYear>.Results
    where c.ID < curr.FirstOrDefault().ID && c.YearEnd == curr.FirstOrDefault ().YearStart.AddDays(-1)
        select c;


foreach (var cfy in curr)
{
    currDate = cfy.YearEnd;
}

foreach (var pfy in prev)
{
    beforeCurrentDate = pfy.YearStart.AddDays (-1);
}

我知道foreach是错误的,所以我该怎么用?

编辑:API结果包含的是一组日期,其中一个日期的IsCurrent字段设置为true。我想要IsCurrent = true结果的EndDate字段,以及前一个结果的StartDate字段。以前的StartDate到EndDate期间。 ID字段没有用,因为可以在当前日期范围之后捕获上一个日期范围。

2 个答案:

答案 0 :(得分:2)

var curr = GlobalResults<FinancialYear>.Results.FirstOrDefault(c => c.IsCurrentYear);
var prev = GlobalResults<FinancialYear>.Results.FirstOrDefault(c => c.ID < curr.ID && c.YearEnd == curr.YearStart.AddDays(-1));

var currDate = curr.YearEnd;
var beforeCurrentDate = prev.YearStart.AddDays(-1);

答案 1 :(得分:0)

您可以通过约束年份并选择Last()替换foreach循环来获取本财政年度的当前日期:

var currYear = GlobalResults<FinancialYear>.Results.Where(p=>p.IsCurrentYear == true).Last();
var currDate = currYear.YearEnd;

同样,您可以使用currYear获取以前的信息:

var prevYear =  GlobalResults<FinancialYear>.Results.Where(p=>p.YearEnd == currDate.AddDays(-1)).FirstOrDefault();
var beforeCurrentDate = prevYear.YearStart.AddDays(-1);