Linq组合来自同一对象实例的数组

时间:2016-06-24 12:53:59

标签: c# arrays linq

我有一个如下所示的类,在该类中,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; }

    }

2 个答案:

答案 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);