开发者

Get the the most recent and the one before the most recent item

开发者 https://www.devze.com 2022-12-21 19:20 出处:网络
I have a table with many anniversaries : Date + Name. I want to display the next anniversary and the one after with Linq.

I have a table with many anniversaries : Date + Name.

I want to display the next anniversary and the one after with Linq.

How can i build the query ? I开发者_JS百科 use EF Thanks John


Just order by date and then use the .Take(n) functionality


Example with a list of some objects assuming you want to order by Date then Name:

List<Anniversaries> annivDates = GetAnnivDates();
List<Anniversaries> recentAnniv = annivDates.OrderBy(d => d.Date).ThenBy(d => d.Name).Take(2).ToList();


If the anniversaries are stored in regular DateTime structs, they may have the 'wrong' year set (i.e. wedding or birth year). I suggest writing a function which calculates the next date for an anniversary (based on the current day) like:

static DateTime CalcNext(DateTime anniversary) {
  DateTime newDate = new DateTime(DateTime.Now.Year, anniversary.Month, anniversary.Day);
  if (newDate < DateTime.Now.Date)
    newDate = newDate.AddYear(1);
  return newDate;
}

Then you proceed with sorting the dates and taking the first two values like described in the other postings:

(from e in anniversaries orderby CalcNext(e.Date) select e).Take(2)
0

精彩评论

暂无评论...
验证码 换一张
取 消