2017-04-07 92 views
0

下面是我的模型: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] 

我怎麼能簡化這個過程?

+1

舉例說明輸入和期望輸出 – ASh

+0

@ASh:我已經更新了我的問題以包含樣本輸入和輸出 –

回答

1
List<MyData> list; 
... 
int[] ids = list.Where(x => x.Tests.Last().SubTests.Count == 0) 
       .Select(x => x.RegionId) 
       .ToArray(); 

表達Where方法可以解釋因爲「測試集合中的最後測試沒有分測試」。

當我們從列表中找到所有要求的測試後,我們用Select方法得到他們的RegionId並保存在數組中。

+1

@Learning,Linq方法'Last()'從序列返回最後一個對象。如果只有一個,那個將是最後一個 – ASh