我有一个具有Nullable DateOfBirth属性的Person对象。是否有一种方法可以使用LINQ来查询Person对象列表中最早/最小的DateOfBirth值?
这是我的开场白:
var firstBornDate = People.Min(p => p.DateOfBirth.GetValueOrDefault(DateTime.MaxValue));
Null DateOfBirth值被设置为DateTime。MaxValue,以便将它们排除在Min考虑之外(假设至少有一个具有指定的DOB)。
但是所有这些对我来说都是将firstBornDate设置为DateTime值。我想要的是与之匹配的Person对象。我是否需要像这样写第二个查询:
var firstBorn = People.Single(p=> (p.DateOfBirth ?? DateTime.MaxValue) == firstBornDate);
或者有没有更精简的方法?
如果要选择具有最小或最大属性值的对象。另一种方法是使用实现IComparable。
public struct Money : IComparable<Money>
{
public Money(decimal value) : this() { Value = value; }
public decimal Value { get; private set; }
public int CompareTo(Money other) { return Value.CompareTo(other.Value); }
}
最大执行将是。
var amounts = new List<Money> { new Money(20), new Money(10) };
Money maxAmount = amounts.Max();
最小实现将是。
var amounts = new List<Money> { new Money(20), new Money(10) };
Money maxAmount = amounts.Min();
通过这种方式,您可以比较任何对象并在返回对象类型的同时获得Max和Min。
希望这能帮助到一些人。