Linq查询从单个列表中获取两个不同的值

时间:2016-02-19 11:56:49

标签: c# linq

Date           value
10/03/2014      77  
10/02/2015      66

10/01/2016      12    
10/01/2016      34
10/01/2016      55

---
---

直到30条记录

我想编写一个linq查询来获取最近30天的值加一  在过去30天之前的价值。

所以我想要一个回复

所有这些记录

10/01/2016      12    
10/01/2016      34
10/01/2016      55

---
---

加上一条记录

10/02/2015      66

只是想知道它是否可能,或者我应该获得这些值 两个不同的查询。注意我正在使用mongodb。

2 个答案:

答案 0 :(得分:1)

信息很少:

var last30Days = sourceList.Where(rec => rec.DateField.Date >= DateTime.Today.AddDays(-30));
var firstOneAfter30Days = sourceList.Where(rec => rec.DateField.Date < DateTime.Today.AddDays(-30)).Take(1);
var allTogether = last30Days.Union(firstOneAfter30Days);

注意:Take(1)也可能是FirstOrDefault()。您可以将它写在一行中,但这样可以更清楚。

答案 1 :(得分:0)

您可以执行以下操作。我使用source来引用您的记录集。

//Create your "Last 30 days" timeframe
DateTime endDate = DateTime.Now;    
DateTime startDate = endDate.AddDays(-30);

//Use a query to get the "one before" record
var firstBeforeStart = source.FirstOrDefault(i => i.Date < startDate);

//Use the date of the "one before" record to calculate a query start date
var queryStart = firstBeforeStart == null ? startDate : firstBeforeStart.Date;

//Run another query to get all data based on the amended query start date
var allRecords = source.Where(i => i.Date >= queryStart && i.Date < endDate);