2017-06-13 51 views
0

獨特價值是什麼我在我的DataTableC#計算數據表

Resource 

    1   // 1 represent normal 
    1 
    2   // 2 represent sql 
    2 
    3   // 3 css 
    4   // 4 unicode 
    4 
    4 

我怎麼能進行計算,這樣我可以在一個文本框

normal  2 
sql  2 
css  1 
unicode 3 

total hits 9 

顯示值嘗試什麼香港專業教育學院迄今

var result = my_datatable.AsEnumerable().Sum(x => Convert.ToInt32(x["Resource"])); 
string result2 = result.ToString(); 
totalTxtBox.Text = result2; 

但它計算出整列(輸出是:24而不是9)

+0

的可能的複製,其價值[ LINQ查詢與GROUP BY和計數(\ *)到匿名類型](https://stackoverflow.com/questions/16489405/linq-query-with-group-by-and-count-into-anonymous-type) – PaulF

回答

0

你可以嘗試使用默認的相等比較來比較值使用Distinct()

var result = my_datatable.AsEnumerable().Distinct().Sum(x => Convert.ToInt32(x["Resource"]));

鮮明的()返回序列中的不同元素。

更多信息:https://msdn.microsoft.com/en-us/library/bb348436(v=vs.110).aspx

你可以嘗試用這個例子作爲您的參考。首先,我從數據表中獲取Distinct值並將其轉換爲列表,然後使用sum函數。

更新答:

DataTable my_datatable = new DataTable(); 
my_datatable.Columns.Add("Value", typeof(int)); 
my_datatable.Columns.Add("Type", typeof(string)); 

my_datatable.Rows.Add(1, "Normal"); 
my_datatable.Rows.Add(1, "Normal"); 
my_datatable.Rows.Add(2, "SQL"); 
my_datatable.Rows.Add(2, "SQL"); 
my_datatable.Rows.Add(3, "CSS"); 
my_datatable.Rows.Add(4, "UNICODE"); 
my_datatable.Rows.Add(4, "UNICODE"); 
my_datatable.Rows.Add(4, "UNICODE"); 

var distinctIds = my_datatable.AsEnumerable() 
       .Select(s => new { 
        value = s.Field<int>("value"), 
       }) 
       .Distinct().ToList(); 


    int total = distinctIds.Sum(item => item.value); 
+0

我仍然有相同的輸出是2.無論如何感謝您的回覆,我會做一些研究。 –

+0

也許我更新的答案會幫助你。 – Joseph

+0

我終於得到了答案(總點擊數= 9)。現在唯一的問題是我如何計算它們中的每一個。我的意思是,有什麼辦法可以對所有這些類型進行分類/選擇價值。因爲我需要分別在文本框中顯示它們。 (可能是這樣的:獲取datatable列「資源」其中值=「2」(所以輸出將是2)。我希望你能得到我的想法...謝謝你的回覆。 –

0

使用下面的示例 -

int[] res = { 1,1,2,2,3,4,4,4}; 

var words = res.AsEnumerable().GroupBy(x => x); 

foreach (var x in words) 
{ 
Console.WriteLine(x.Key+"-"+x.Count()); 
} 

它將打印輸出原樣

1-2 
2-2 
3-1 
4-3 
+0

在你的代碼中進行相應的修改。我在一個數組中嘗試了它,只是爲了演示目的。你應該做my_datatable.AsEnumerable()。GroupBy(x => Convert.ToInt32(x [「Resource」]] )),然後打印密鑰並計數檢查。 – DChamp

+0

嗨,感謝您的回覆。自從我的工作空間在辦公室以後,我會盡快嘗試。無論如何,我的情況是,這些資源目前在我的數據表中,通過酌情處理。那麼是否有可能使用linq來單獨進行計算呢?我的意思是直接來自列,因爲我需要顯示每個文本框中的值。希望你明白這個主意。謝謝。 –

0

我想通了由自己

使用這一行(LINQ),以篩選出你想要

 int normalcount = my_datatable 
      .AsEnumerable() 
      .Where(r => r.Field<string>("Resource") == "1") 
      .Count(); 

嘗試改變這一行濾掉值,根據您的列值

  .Where(r => r.Field<string>("Resource") == "2") 
     .Count(); 
+0

謝謝大家幫助解答這個問題。 –