我有一个名为DocumentHistory的类,它具有两个DateTimeOffset?
和CreatedOn
属性。我希望能够最近一次 订购,而不必指定想要先查看的属性。
我尝试使用Linq的ModifiedOn
来订购它们。
OrderByDescending
答案 0 :(得分:2)
您可以尝试在DocumentHistory类上实现IComparable。例如,您可能会遇到这样的情况:
class DocumentHistory : IComparable<DocumentHistory>
{
public DateTime? CreatedOn { get; set; }
public DateTime? ModifiedOn { get; set; }
public int CompareTo(DocumentHistory other)
{
if (ReferenceEquals(this, other)) return 0;
if (ReferenceEquals(null, other)) return 1;
var thisMostRecentDate = Nullable.Compare(CreatedOn, ModifiedOn) > 0 ? CreatedOn : ModifiedOn;
var otherMostRecentDate = Nullable.Compare(other.CreatedOn, other.ModifiedOn) > 0 ? other.CreatedOn : other.ModifiedOn;
return Nullable.Compare(otherMostRecentDate, thisMostRecentDate);
}
}
然后,如果您只是在列表上调用Sort()
,它将按照您期望的顺序对它们进行排序。
答案 1 :(得分:0)
通常情况下,您可以尝试将所有属性组合成一个集合(例如数组),然后添加Max()
var documentHistories = docHistory
.OrderByDescending(c => new DateTimeOffset?[] {
c.CreatedOn, //TODO: put all the relevant properties here
c.ModifiedOn,
}.Max())
.ToList();
如果仅具有2
属性,则可以将查询简化为
var documentHistories = docHistory
.OrderByDescending(c => c.CreatedOn > c.ModifiedOn ? c.CreatedOn : c.ModifiedOn)
.ToList();