我有一个类似于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不适合这个吗?
答案 0 :(得分:4)
您可以使用Max
和Min
:
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不会 允许没有组的聚合但是它不是太糟糕