前言
發生的情況是這樣的,
我有兩個linq語法,查詢出來的類別是一樣的。
之後邏輯判斷也都一樣,最簡單的方式就是,複製貼上。
但這種寫法,一旦下面的邏輯變動的話,要改兩個地方。忘了改的話,怎麼死的都不知道。
正文
先看一下類別長這樣
private class alarmAbs
{
public DateTime OccurDate { get; set; }
public double? alarm_num { get; set; }
public int absVal { get; set; }
}
下面兩個LINQ分別為
List<alarmAbs> a = cars.Where(p => p.OccurDate >=
autoRound.Start_OccurDate && p.OccurDate <=
autoRound.End_OccurDate)
.Where(p=>p.canID.Equals(418449793)).Where(p=>p.byte2-128 > 10 )
.Select(p => new alarmAbs {
OccurDate = p.OccurDate,
alarm_num =
p.byte2-128,
absVal =
Math.Abs(Convert.ToInt32(p.byte2-128))
}).OrderByDescending(p=>p.absVal).ToList();
List<alarmAbs> b = cars.Where(p => p.OccurDate >=
autoRound.Start_OccurDate && p.OccurDate <=
autoRound.End_OccurDate)
.Where(p =>
p.canID.Equals(418449793)).Where(p => (p.byte4 - 128) * 0.5 > 50 )
.Select(p => new alarmAbs
{
OccurDate =
p.OccurDate,
alarm_num =
(p.byte4 - 128) * 0.5,
absVal
= Math.Abs(Convert.ToInt32((p.byte4 - 128) * 0.5))
}).OrderByDescending(p => p.absVal).ToList();
之後的邏輯都一樣,所以應該是可以用for來代替我執行動作。
重點來了,要把 a 跟 b 弄成陣列表示,這樣後續才能用for去執行。
感謝 Line社群(資訊工程相關討論)的 旋律 大大,他提供了一個連結(An array of List in c#)
可使用
List<int>[] a = new List<int>[100];
來宣告a為一個List陣列。
所以變成
List<alarmAbs>[] alarmInAuto = new List<alarmAbs>[2];
alarmInAuto[0] =
cars.Where(p => p.OccurDate >= autoRound.Start_OccurDate &&
p.OccurDate <= autoRound.End_OccurDate)
….
alarmInAuto[1] =
cars.Where(p => p.OccurDate >= autoRound.Start_OccurDate &&
p.OccurDate <= autoRound.End_OccurDate)
最後用for帶入
for (int i = 0; i < 2; i++)
{
if (alarmInAuto[i].Any())
alarmTime =
alarmInAuto[i].First();
else
continue;
....
}
0 意見:
張貼留言