下面是我的模型:Linq查詢考慮甚至記錄,跳過奇數記錄
public class MyData
{
public int RegionId { get; set; }
public string Region { get; set; }
public List<Test> Tests { get; set; }
}
public class Test
{
public int? TestId { get; set; }
public List<SubTest> SubTests { get; set; }
}
下面是我的方法:
private void MyMethod(int testId, int lastTestId)
{
var list = new List<MyData>();//contains some records
if (testId == 0)
{
var test1 = list[0].Tests[0];
var test2 = list[0].Tests[1];
var regionIds = new List<int>();
int counter = 0;
foreach (var item in list)
{
counter = 0;
foreach (var test in item.Tests)
{
if (test.SubTests.Count != 0 && counter % 2 != 0)
regionIds.Add(item.RegionId);
counter++;
}
}
}
else
{
var test1 = list[0].Tests[0];
var regionIds = new List<int>();
foreach (var item in list)
{
counter = 0;
foreach (var test in item.Tests)
{
if (test.SubTests.Count != 0)
regionIds.Add(item.RegionId);
counter++;
}
}
}
}
在上述方法時testId爲0,那麼我會在測試中有2條記錄,當TestId> 0時,我將在測試中只有1條記錄。
現在我試圖找到那些沒有SubTests(SubTest.Count=0)
的地區ID進行測試,但是當我有2個測試時,我想考慮上次測試併爲最後一次測試計數子測試。
我的代碼工作正常,但我有一些代碼重複,我想簡化。
而不是循環我寧願Linq,但因爲我不知道如何用linq做到這一點,所以我使用了for循環。
更新:
輸入:
[0] : Region = "abc"
RegionId = 1
"TestList":
[
{
TestId : 100,
SubTests : //contains some records
},
{
TestId : 101,
SubTests : //contains some records
},
],
[1] : Region = "Pqr",
RegionId = 2
"TestList":
[
{
TestId : 100,
SubTests : //contains some records
},
{
TestId : 101,
SubTests : //No records i.e count = 0
},
],
[2] : Region = "Lmn",
RegionId = 3
"TestList":
[
{
TestId : 100,
SubTests : //No records i.e count = 0
},
{
TestId : 101,
SubTests : //No records i.e count = 0
}
]
預期輸出:
[2,3]
我怎麼能簡化這個過程?
舉例說明輸入和期望輸出 – ASh
@ASh:我已經更新了我的問題以包含樣本輸入和輸出 –