[英]How to format the datatable in C#?
我有一个这样的数据表。
User Unit Score
kiran testing 2
kiran demo 1
kiran TRacking 3.5
manu 1234 .5
manu 1567 3.5
Priya 1689 9
Tom 1567 2
Tom 3454 5
Peter testing 2
Peter demo 2.5
现在我需要在另一个数据表中这样的结果:
User Svc VSS
kiran 6.5
manu 4.0
Priya 9.0
Tom 7.0
Peter 4.5
我需要检查用户的单位,基于此我需要总结分数。 如果该单元包含字符串,则这些得分值应转到名为svc的新数据表列。
如果该单元包含整数,则这些得分值应转到名为vss的新列
这样最终结果将是这样的:
User Svc VSS
kiran 6.5
manu 4.0
Priya 9.0
Tom 7.0
Peter 4.5
我是C#的新手。
这是一个解决方案,尽管请记住,DataTables很难使用,最好创建一个可以使用的对象集合。
public class SvcVssRecord
{
public SvcVssRecord(double svc, double vss)
{
Svc = svc;
Vss = vss;
}
public double Svc { get; set; }
public double Vss { get; set; }
}
public class Builder
{
private readonly Dictionary<string, SvcVssRecord> _records;
public Builder()
{
_records = new Dictionary<string, SvcVssRecord>();
}
public void Add(string user, string unit, double score)
{
int result;
bool scoreIsSvc = !int.TryParse(unit, out result);
if (!_records.ContainsKey(user))
{
_records.Add(user, new SvcVssRecord(scoreIsSvc ? score : 0, scoreIsSvc ? 0 : score));
}
else
{
if (scoreIsSvc)
{
_records[user].Svc += score;
}
else
{
_records[user].Vss += score;
}
}
}
public DataTable ToDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("User"));
dt.Columns.Add(new DataColumn("Svc"));
dt.Columns.Add(new DataColumn("Vss"));
foreach(var key in _records.Keys)
{
DataRow dr = dt.NewRow();
dr["User"] = key;
dr["Svc"] = _records[key].Svc;
dr["Vss"] = _records[key].Vss;
dt.Rows.Add(dr);
}
return dt;
}
}
public class Run
{
public void RunApp(DataTable source)
{
Builder b = new Builder();
foreach (DataRow dr in source.Rows)
{
b.Add((string) dr["User"], (string) dr["Unit"], (double) dr["Score"]);
}
DataTable dt = b.ToDataTable();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.