我的数据表中有什么
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 :(得分:0)
您可以尝试使用Distinct()
var result = my_datatable.AsEnumerable().Distinct().Sum(x => Convert.ToInt32(x["Resource"]));
Distinct()通过使用默认的相等比较器来比较值,从序列中返回不同的元素。
了解更多信息:https://msdn.microsoft.com/en-us/library/bb348436(v=vs.110).aspx
您可以尝试使用此示例作为参考。首先,我从数据表中获取Distinct值并将其转换为list,然后使用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);
答案 1 :(得分:0)
使用以下示例 -
re.findall
它将输出打印为 -
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());
}
答案 2 :(得分:0)
我自己想出来了
使用此行(linq)来过滤掉您想要的值
int normalcount = my_datatable
.AsEnumerable()
.Where(r => r.Field<string>("Resource") == "1")
.Count();
根据您的列值
尝试更改此行以过滤掉哪个值 .Where(r => r.Field<string>("Resource") == "2")
.Count();