请教个问题啊,我有个DataTable 内容大概为:
id name work
1 张三 test1
2 张三 test1
3 李四 test2
4 王五 test3
然后我想 将这个dt 转成一个新的DataTable
id name work worknum
1 张三 test1 2
2 李四 test2 1
3 王五 test3 1
请问这个该怎么写
id name work
1 张三 test1
2 张三 test1
3 李四 test2
4 王五 test3
然后我想 将这个dt 转成一个新的DataTable
id name work worknum
1 张三 test1 2
2 李四 test2 1
3 王五 test3 1
请问这个该怎么写
解决方案 »
- 关于Response.ContentType的问题
- 小弟有个窗体问题指教
- 如何将短信收发程序与WEB页面结合
- 为什么画面上DataGrid的显示数据没改变
- 登陆时,输入用户名和密码后,按回车后触发登陆按钮,直接登陆?
- 关于:FreeTextBoxControl 如何起用FreeTextBoxControl的图象上传功能!试了几次也没有结果!
- 外部组件发生异常。
- System.Diagnostics .Process .Start调用的dos命令
- 如何设置让窗体不能拉大
- 我的Form被Panel遮住了,怎样才能够让Form收到mouse消息,而不是Panel?
- c#中获取不到字段上的attribute
- VS WINFORM编程中 .cs文件与html文件 数据交互问题
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("ID", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Work", typeof(string)) });
dt.Rows.Add(new object[] { 1, "张三", "test1" });
dt.Rows.Add(new object[] { 2, "张三", "test1" });
dt.Rows.Add(new object[] { 3, "李四", "test2" });
dt.Rows.Add(new object[] { 4, "王五", "test3" }); DataTable dtResult = dt.Clone();
dtResult.Columns.Add(new DataColumn("worknum", typeof(int)));
dtResult.Columns[0].AutoIncrement = true;
dtResult.Columns[0].AutoIncrementSeed = 1;
dtResult.Columns[0].AutoIncrementStep = 1;
int i = 1;
var query = from t in dt.AsEnumerable()
group t by new { t1 = t.Field<string>("Name"), t2 = t.Field<string>("Work") } into m
select new
{
ID = i++,
Name = m.Key.t1,
Work = m.Key.t2,
worknum = m.Count() }; query.ToList().ForEach(q => dtResult.Rows.Add(q.ID, q.Name, q.Work, q.worknum));
string res = ""; foreach (DataRow item in dtResult.Rows)
{
res += item[0].ToString() + " ";
res += item[1].ToString() + " ";
res += item[2].ToString() + " ";
res += item[3].ToString() + " " + "\r\n"; }
label1.Text = res;
{
//测试数据
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(System.Int32));
dt.Columns.Add("name", typeof(System.String));
dt.Columns.Add("work", typeof(System.String)); DataRow dr1 = dt.NewRow();
dr1[0] = 1; dr1[1] = "张三"; dr1[2] = "test1";
DataRow dr2 = dt.NewRow();
dr2[0] = 2; dr2[1] = "张三"; dr2[2] = "test1";
DataRow dr3 = dt.NewRow();
dr3[0] = 3; dr3[1] = "李四"; dr3[2] = "test2";
DataRow dr4 = dt.NewRow();
dr4[0] = 4; dr4[1] = "王五"; dr4[2] = "test3"; dt.Rows.Add(dr1);
dt.Rows.Add(dr2);
dt.Rows.Add(dr3);
dt.Rows.Add(dr4);
//分组
DataTable dt1 = dt.Clone();
dt1.Columns.Add("worknum");
var o = dt.AsEnumerable().GroupBy(x => new{name = x["name"],work = x["work"]})
.Select(x => new
{
id=x.First()["id"],
name = x.Key.name,
work=x.Key.work,
worknum=x.Count(),
}).ToList() ; o.ForEach(x =>
{
DataRow row = dt1.NewRow();
row[0]=x.id;
row[1]=x.name;
row[2]=x.work;
row[3] = x.worknum; dt1.Rows.Add(row);
}); foreach (DataRow i in dt1.Rows)
{
Console.WriteLine("{0} {1} {2} {3}", i[0], i[1], i[2],i[3]);
} Console.ReadLine();
}
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("work", typeof(string)); dt.Rows.Add(1, "张三", "test1");
dt.Rows.Add(2, "张三", "test1");
dt.Rows.Add(3, "李四", "test2");
dt.Rows.Add(4, "王五", "test3"); var result = dt.AsEnumerable()
.GroupBy(t => new { name = t.Field<string>("name"), work = t.Field<string>("work") })
.Select(t => new { name = t.Key.name, work = t.Key.work, worknum = t.Count() }); int index = 0;
foreach (var r in result)
{
Console.WriteLine("{0} {1} {2} {3}", ++index, r.name, r.work, r.worknum);
}
}
}
}