我有一张表RecentChanges
,其中包含对我网站上所有操作的引用。它包含完成的操作类型(例如编辑,上传等),修订版ID外键(引用Revisions
表中的ID - 可以为null)和日志ID外键(其中)对Logs
表中的ID的引用可以为null。提到的最后两个表都包含动作发生时间的时间戳。
我的问题是如何命令RecentChanges
表中的结果按降序显示,因为时间戳值在两个单独的表中?
这里有一个想法是Linq查询的片段:
var list = (from r in Entity.RecentChanges
//where clause??
select r);
答案 0 :(得分:1)
这样的东西?我投射到一个匿名类型来帮助排序(你需要在投影中添加你需要的其他字段):
var query = (from c in Entity.RecentChanges
from l in Entity.Logs
.FirstOrDefault(log => log.ID == c.LogID).DefaultIfEmpty()
from r in Entity.Revisions
.FirstOrDefault(rev => rev.ID == c.RevisionID).DefaultIfEmpty()
select new
{
ActivityDate = l != null
? l.Timestamp
: r != null
? r.Timestamp
: DateTime.Now. //what if both are null? catching all eventualities here
//select your other fields here
})
.OrderByDescending(c => c.ActivityDate)
.ToList();