LINQ - 确定每个记录的最早日期

时间:2016-06-21 12:47:22

标签: c# linq

嘿,我得到一个里面有很多记录的列表,里面有3个DateTime(可以为空)。我需要的是获得一个LINQ表达式,确定这三个中哪一个是最新的,然后选择该记录并再次检查。以下是我创建List的代码。

List<ActivityJoinUserTopicVote> ActivityList = new List<ActivityJoinUserTopicVote>();
foreach (var p in postdate)
{
    ActivityList.Add(new ActivityJoinUserTopicVote(p.R_Posted, p.Forum_id, p.R_Posted_By, p.R_Message, p.Reply_ID, p.Topic_ID, p.User));
}
foreach (var v in votedate)
{
    ActivityList.Add(new ActivityJoinUserTopicVote(v.data, v.Topic_ID, v.vote, v.Member_ID, v.Vote_Member_ID));
}
foreach (var t in topicdate)
{
    ActivityList.Add(new ActivityJoinUserTopicVote(t.T_date, t.Forum_id, t.T_Originator, t.T_Replies, t.T_ukaz, t.Topic_ID, t.User, t.T_Url, t.T_subject));
}
return ActivityList;

在返回ActivityList之前,我需要它来确定哪一个是最新的并按这种方式排序。也许我可以在创建列表时以某种方式做到这一点?问题是我需要签入3个不同的列(R_Posted,data和T_date)

3 个答案:

答案 0 :(得分:3)

使用刻度线获取最多3个日期,并按该值排序:

<强>助手:

private long MaxOfThreeDate(DateTime? date1, DateTime? date2, DateTime? date3)
{
    long max1 = Math.Max(date1.GetValueOrDefault().Ticks, date2.GetValueOrDefault().Ticks);

    return Math.Max(max1, date3.GetValueOrDefault().Ticks);
}

<强>用法:

return ActivityList.OrderByDescending(x => MaxOfThreeDate(x.data, x.R_Posted, x.T_date)).ToList();

答案 1 :(得分:2)

替换

return ActivityList;

return ActivityList.OrderByDescending(x =>  x.data.HasValue ? x.data : ( x.R_Posted.HasValue ? x.R_Posted : x.T_date)).ToList();

return ActivityList.OrderByDescending(x => new DateTime?[]{ x.data, x.R_Posted, x.T_date}.Max()).ToList();

返回按日期字段降序排序的ActivityList

答案 2 :(得分:1)

您可以使用此

获取最新版本
var list = ActivityList.OrderByDescending(x=>x.Date).First();