我有如下所述的LINQ查詢。問題是,當該數據是由價格劃分,它日期組的價格,而不考慮可能發生的不連續的日期如何優化LINQ查詢按價格對日期進行分組而不合並結果
價格相同的情況下using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
//Console.WriteLine("Hello World");
List<Prices> list = new List<Prices>();
list.Add(new Prices() { Date = DateTime.Parse("2017-06-17"), Price = Double.Parse("50")});
list.Add(new Prices() { Date = DateTime.Parse("2017-06-18"), Price = Double.Parse("50")});
list.Add(new Prices() { Date = DateTime.Parse("2017-06-19"), Price = Double.Parse("50")});
list.Add(new Prices() { Date = DateTime.Parse("2017-06-20"), Price = Double.Parse("100")});
list.Add(new Prices() { Date = DateTime.Parse("2017-06-21"), Price = Double.Parse("100")});
list.Add(new Prices() { Date = DateTime.Parse("2017-06-22"), Price = Double.Parse("100")});
list.Add(new Prices() { Date = DateTime.Parse("2017-06-23"), Price = Double.Parse("50")});
list.Add(new Prices() { Date = DateTime.Parse("2017-06-24"), Price = Double.Parse("50")});
list.Add(new Prices() { Date = DateTime.Parse("2017-06-25"), Price = Double.Parse("50")});
var baseservices = list
.GroupBy(l => l.Price)
.Select(g => new
{
Price = g.Key,
PeriodStart = g.Select(l=>l.Date).Min(),
PeriodEnd = g.Select(l => l.Date).Max(),
});
foreach(var item in baseservices)
{
Console.WriteLine(item.Price + " " + item.PeriodStart + " " + item.PeriodEnd);
}
}
}
public class Prices
{
public DateTime Date {get;set;}
public double Price {get;set;}
}
public class Quote
{
public DateTime PeriodStart {get;set;}
public DateTime PeriodEnd {get;set;}
public double Price {get;set;}
}
結果是
50 6/17/2017 12:00:00 AM 6/25/2017 12:00:00 AM
100 6/20/2017 12:00:00 AM 6/22/2017 12:00:00 AM
我如何獲得結果如下
50 6/17/2017 12:00:00 AM 6/29/2017 12:00:00 AM
100 6/20/2017 12:00:00 AM 6/22/2017 12:00:00 AM
50 6/23/2017 12:00:00 AM 6/25/2017 12:00:00 AM
使用[moreLINQ](https://www.nuget.org/packages/morelinq)中的「GroupAdjacent」。如果你不想依賴整個pachage,你可能只需複製代碼即可。它的代碼位於GitHub上:https://github.com/morelinq/MoreLINQ/blob/master/MoreLinq/GroupAdjacent.cs。請確保許可證允許在做之前(我不是這裏的專家)。 – MarcinJuraszek