我有一个如下所示的类,在该类中,Amount数组和date的数组索引之间存在一对一的映射,因此长度总是相同的。
我必须从Amount []中获取最大金额,其中Date1> DateTime.Today& DateTime.Today<日期2< @OneParameterDate。
如何使用linq完成此操作?
public class TestClass
{
public string ID { get; set; }
public decimal[] Amount { get; set; }
public DateTime[] Date1 { get; set; }
public DateTime[] Date2 { get; set; }
public DateTime[] Date3 { get; set; }
public string Name { get; set; }
}
答案 0 :(得分:2)
Charles Mager的评论指向了正确的方向。但如果你不愿意以这种方式改变你的代码,这应该会给你你想要的结果:
decimal maxAmount = Enumerable.Range(0, Amount.Length)
.Where(i => Date1[i] > DateTime.Today &&
Date2[i] > DateTime.Today &&
Date2[i] < OneParameterDate)
.Max(i => Amount[i]);
Enumerable.Range
遍历数组索引Where
过滤器,用于满足您的条件(我从您的问题中理解)的索引。
从这些过滤的索引中,Max
选择最大金额值。
答案 1 :(得分:2)
如果可以的话,更好的表现就是拥有这样的课程:
public class ClassA
{
public decimal Amount { get; set; }
public DateTime Date1 { get; set; }
public DateTime Date2 { get; set; }
public DateTime Date3 { get; set; }
}
然后您的IEnumerable<ClassA>
中有一个TestClass
。现在你可以对它进行linq查询。
records.Where(record.Date1 < DateTime.Today &&
DateTime.Today < record.Date2 &&
record.Date2 < @SomeParameter)
.Max(record.Amount);