2017-10-17 48 views
4

我正在寫一個C#LINQ查詢從SQL表中獲取數據低於LINQ查詢到數據放在一個嵌套的對象

表1

Id Status SubStatus 
1 Review Pending 
2 Review Complete 
3 Review Approved 
4 Review Denied  
5 Info Processing 
6 Info Pending 
7 Info Requested 
8 Info Received 
9 Approval Approved 
10 Review Approved 

從上表的工作,我想放在一個對象中的數據如下面

public class LastStatusDto 
    { 
     public string StatusName { get; set; } 
     public int StatusId { get; set; } 
     public int Count { get; set; } 
     public IEnumerable<LastStatusChildDataDto> drillDownData { get; set; } 
    } 

public class LastStatusChildDataDto 
{ 
    public string SubStatusName { get; set; }  
    public int Count { get; set; } 
} 

和樣本結果(狀態「評論」)看起來像下面

  { 
       "statusName": "Review", 
       "statusId": 0, 
       "count": 5, 
       "drillDownData": 
       [{ 
       "subStatusName":"Approved", 
       "count":2 
       }, 
       { 
       "subStatusName":"Complete", 
       "count":1 
       }, 
      { 
       "subStatusName":"Pending", 
       "count":1 
       }, 
       { 
       "subStatusName":"Denied", 
       "count":1 
       }, 
      ] 
     } 

對於上面的場景,寫一個LINQ查詢是一個好方法。我試圖通過status分組,但沒能想出一個辦法把substatuses在嵌套對象像下面

var res = from status in context.Table1 
      group status by status.Status into s 

      select new LastStatusDto 
      { 
       Count = s.Count(), 
       StatusName = s.Key, 
       drilldownData = {/* ? */}       
      }; 
+0

爲什麼'StatusId'是LastStatusDto的一個屬性? – JuanR

回答

4

這應做到:

var res = table1.GroupBy(t => t.Status) 
      .Select(g => new LastStatusDto() 
      { 
       StatusId = 0, 
       StatusName = g.Key, 
       Count = g.Count(), 
       drillDownData = g.GroupBy(s => s.SubStatus) 
        .Select(st => new LastStatusChildDataDto() 
        { 
         SubStatusName = st.Key, 
         Count = st.Count() 
        }) 
      }); 

正如我在上面的評論中提到,StatusId有沒有地方作爲LastStatusDto的財產,因爲它是一個集合,所以我將它設置爲0只是爲了與您的結構相匹配。

+0

有道理!謝謝 – DoIt