获取列表c#中的下一个项目并更新当前项目

时间:2017-03-06 12:56:03

标签: c# linq

我有一个像这样的列表

List<NamazTimesModel> res = nt.Select();

在res中我有这样的数据

[
{
"name": "fajr",
"salahTime": "05:23",
"namazTime": "05:23",
"date": "3/6/2017 12:00:00 AM",
"endTime": null
},
{
"name": "sunrise",
"salahTime": "07:01",
"namazTime": "07:01",
"date": "3/6/2017 12:00:00 AM",
"endTime": null
},
{
"name": "zuhr",
"salahTime": "12:33",
"namazTime": "12:33",
"date": "3/6/2017 12:00:00 AM",
"endTime": null
},
....
]

我循环遍历列表并检查当前项目是什么。例如,它是'fajr'然后我必须从下一个项目获得'salahTime'并将fajr的'endTime'设置为。

我可以得到一些帮助吗?

6 个答案:

答案 0 :(得分:1)

您可以在找不到目标项目时跳过列表项目,然后抓住目标项目本身以及下一项目:

var twoItems = res.SkipWhile(item => item.Name != "fajr").Take(2).ToList();

如果twoItems列表中只有两个项目,则您找到了fajr,而且它不是列表中的最后一项。如果您的项目少于两个,则fajr不在那里,或者它是列表中的最后一项。

检查您是否有两个项目,并根据需要设置字段:

if (twoItems.Count == 2) {
    twoItems[0].EndTime = twoItems[1].SalahTime;
}

答案 1 :(得分:1)

这样的事情应该这样做:

   var res = nt.Aggregate(new List<NamazTimesModel>(), (t, i) =>
            {
                if (t.Count > 0)
                {
                    t[t.Count - 1].endTime = i.salahTime;
                }
                t.Add(i);
                return t;
            }
        );

答案 2 :(得分:0)

for(int i = 1; i < res.Count; i++)
{
   // Todo: Check for null references by your own way.
   res[i - 1].endTime = res[i].salahTime;
}

答案 3 :(得分:0)

您可以将Namaz时间设置如下,

for(var i = 0; i<nts.Count()-1; i++){
 nt[i].EndTime = nt[i+1].SalahTime
}

然后别忘了设置Namaz的最后时间:

nts[nt.Count()-1] = nts[0].SalahTime;

答案 4 :(得分:0)

res.ForEach(item =>
{
     int index = res.FindIndex(m => m.name == item.name);
     item.endTime = index+1 != res.Count ? res.ElementAt(index + 1).salahTime : res.FirstOrDefault().salahTime;
});;

答案 5 :(得分:0)

您可以使用linq查询进行两次迭代。

会是这样的:

string[] numbers= {"one","two","last"}; string[] variables={"string one","int two","string three"}; var res = variables.Where(v => numbers.Any(n => v.Contains(n ))); res.ToList().ForEach(d => Console.WriteLine(d));

工作代码here