2016-03-04 82 views
-2

我想在數據表中統計項目狀態。Linq查詢按狀態計數

我的DataTable看起來像

Date , Tkt Status 
1/2/13 open 
1/2/13 open 
2/2/13 open 
2/2/13 closed 
2/2/13 closed 
3/3/13 in-progress 
4/3/13 closed 

我想在格式

Date, Open, Closed, in-progress 
1/2/13 2  0   0 
2/2/13 1  2   0 
3/3/13 0  0   1 
4/3/13 0  1   0 

我希望它使用LINQ來完成下面的數據的另一個數據表。

我的嘗試到目前爲止

dataQuery.Query =「Yes」;

    dataQuery.ViewFields = "<FieldRef Name='Created' /><FieldRef Name='tckPrty' /><FieldRef Name='tckStat' />"; 
        dataQuery.ViewFieldsOnly = true; 
        tktData = tktList.GetItems(dataQuery).GetDataTable(); 

        var newData = from row in tktData.AsEnumerable() 
            where groupDate(row.Field<string>("tckStat")) 
              group row by row.Field<string>("Created") into Status 
              orderby Status.Key 
              select new 
              { 
               key = Status.Key, 
               values = Status, 
               count = Status.Count() 
              }; 

        foreach (var item in newData) 
        { 
         foreach (string s in tktStatus) 
         { 
          chartData.Rows.Add(item.key,item.count); 
         } 
        } 

功能放在這裏

靜態布爾groupDate(串技能) { bool值= FALSE;

  if (skill== "open") 
      { 
       value = true; 
      } 
      else 
      { 
       value = false; 
      } 

      return value; 
    } 
+4

我想要一輛法拉利,新房和sixpack。除非我在其中加入了一些工作,否則我不會得到任何這些結果 - 我建議您嘗試解決方案,然後就具體問題尋求幫助。 – Takarii

+0

我已經嘗試瞭解決方案,但我堅持將狀態設置爲列並根據它計數。我會在這裏發佈我的linq。並且不要過早地評判別人,這可能是因爲人們不希望通過一次性提供大量代碼來混淆別人。 – Rehan

+0

這不是判斷。你在問題中說我想要xyz。 SO不是代碼寫作服務,所以如果你不提供任何東西,你什麼也得不到。看到[問一個好問題](http://stackoverflow.com/help/how-to-ask) – Takarii

回答

2

很明顯,我們沒有您的數據表使用,所以我從您的示例構建了一個數組。

var lines = @"Date , Tkt Status 
1/2/13 open 
1/2/13 open 
2/2/13 open 
2/2/13 closed 
2/2/13 closed 
3/3/13 in-progress 
4/3/13 closed".Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Skip(1).Select(l => l.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)).Select(x => new { Date = x[0], Status = x[1] }).ToArray(); 

然後,你可以使用LINQ像這組是:

var grouped = lines.GroupBy(l => l.Date).Select(g => new { 
    Date = g.Key, 
    Open = g.Count(l => l.Status == "open"), 
    Closed = g.Count(l => l.Status == "closed"), 
    InProgress = g.Count(l => l.Status == "in-progress") 
}).ToArray(); 

輸出:

Date Open Closed InProgress 
1/2/13 2 0  0 
2/2/13 1 2  0 
3/3/13 0 0  1 
4/3/13 0 1  0 
+0

非常感謝Keith。我會嘗試一下代碼並讓你知道。雖然我有一個問題,我真的不知道什麼數據可以進入狀態欄。這將是動態的。而且,我的Datatable基本上來自具有日期和狀態列的Sharepoint列表數據。 – Rehan

+0

@MdRehanMoazzam這個答案可能會幫助你動態列:http://stackoverflow.com/a/26719396/4473405 –