2017-03-06 80 views
1

我有這樣獲取下一個項目,並更新當前的一個

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'設置爲那個。

我可以得到一些幫助嗎?

+0

可能重複的[LINQ列表中的下一項](http://stackoverflow.com/questions/2680228/linq-next-item-in-list) – NineBerry

+0

關心包括你是如何循環通過列表? –

+1

@NineBerry我想OP比他的標題要略多一點:除了下一個,他還需要當前的項目,以便他可以修改它的屬性。 – dasblinkenlight

回答

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; 
      } 
     ); 
+0

真棒,感謝隊友。 :) – mohsinali1317

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; 
} 
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; 
} 
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; 
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; 
});; 
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

相關問題