这是我使用的常规代码,但是我可以一次使用lambda或linq吗? 使用lambda更新基于对象先前值的集合中的对象
foreach (var city in frontcities)
{
if (first== false)
{
// previous = city.CitySchduletime.Where(item => item.Schduletimestart == hour).FirstOrDefault().Schduletimestart;
previous = city.CitySchduletime.Where(item => item.Schduletimestart == hour).FirstOrDefault().Schduletimestop;
first = true;
}
else
{
DateTimeOffset ts = DateTimeOffset.FromUnixTimeMilliseconds(previous).AddHours(defaultgap);
int eta = 600;
long start = ts.AddSeconds(eta).ToUnixTimeMilliseconds();
previous = ts.AddSeconds(eta).AddHours(1).ToUnixTimeMilliseconds();
SchduleTime schduleTime = city.CitySchduletime.Where(item => item.Schduletimestart == hour).FirstOrDefault();
schduleTime.Schduletimestop = previous;
schduleTime.Schduletimestart = start;
// city.CitySchduletime.Where(item => item.Schduletimestart == hour).FirstOrDefault().Schduletimestart = start;
//city.CitySchduletime.Where(item => item.Schduletimestart == hour).FirstOrDefault().Schduletimestop = previous;
//Caculate Eta betwen next city and this city
}
}
答案 0 :(得分:0)
我经常定义一个扩展方法,看起来像这样:
public static IEnumerable<(T Previous, T Current)> CurrentAndPrevious<T>(this IEnumerable<T> self)
{
using(var iter = self.GetEnumerator())
{
if (iter.MoveNext())
{
var previous = iter.Current;
while (iter.MoveNext())
{
yield return (previous, iter.Current);
previous = iter.Current;
}
}
}
}
使用方式
foreach(var (previous, current) in myList.CurrentAndPrevious())
{
...
}