LINQ - C# - 使用lambda - 从Collection中获取一组数据

时间:2012-11-15 07:33:05

标签: c# linq

我有一个类似于Point的结构TimePoint,除了,x值是一个日期时间,这些时间点的可观察集合以及一个采用datetime并返回double值的方法。

我想检索从日期时间返回的双精度的最大值和最小值 在这个系列中。

我是linq的新手,我无法找出我必须传递给observable集合的查询来实现这一点。

这是我想要的:

double minDouble = 0;
double maxDouble = 0;

foreach(TimePoint item in obsColl)
{
    var doubleVal = ConvertToDouble(item.X); //Here x is a datetime
    if(minDouble > doubleVal)
        minDouble = doubleVal;
    if(maxDouble < doubleVal)
        maxDouble = doubleVal;
}

如何使用LINQ实现这一目标?或者LINQ不适合这个吗?

4 个答案:

答案 0 :(得分:4)

您可以使用MaxMin

double minDouble = obsColl.Min(item => ConvertToDouble(item.X));
double maxDouble = obsColl.Max(item => ConvertToDouble(item.X));

答案 1 :(得分:3)

您可以查看此示例101 LINQ Samples

答案 2 :(得分:2)

效率更高

    double minDouble =ConvertToDouble( obsColl.Min(item => item.X));
    double maxDouble = ConvertToDouble(obsColl.Max(item => item.X));

答案 3 :(得分:0)

使用流畅的断言包

    [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethod]
    public void MyTestMethod()
    {
        var list = new List<double>() { 1, 3, 5, 2, 9, 4 };

        var minmax = from l in list
                     group l by 1 into g
                     select new
                     {
                         min = g.Min(),
                         max = g.Max()
                     };

        minmax.First().min.Should().Be(1);
        minmax.First().max.Should().Be(9);
    }

现在组l乘1到g 是一个黑客,因为linq不会 允许没有组的聚合但是它不是太糟糕