使用lambda根据集合中的先前对象值更新集合中的对象

时间:2020-06-10 16:51:26

标签: c# linq lambda

这是我使用的常规代码,但是我可以一次使用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
    }
}      

1 个答案:

答案 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())
 {
            ...
 }