嘿,我得到一个里面有很多记录的列表,里面有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)
答案 0 :(得分: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();