前言:
最近经常处理Excel,读取Excel数据放在代码中一般都会存为DataTable中,故而处理DataTable比较多。
正文:
我的需求是:一个表里面找到其中三列完全相同的那些行。 比如北京每一列的数据都是相同的,取出来。
第一步:
获取那几列数据,存到Datable中。
第二部:
处理DataTable,那么这种需求首先想到的是用sql,group by 语法就能解决,转换为sql的思路去实现。
第三步:
上代码
public static void GetMm()
{
DataTable dt = new DataTable("cart");
DataColumn dc1 = new DataColumn("areaid", Type.GetType("System.String"));
DataColumn dc2 = new DataColumn("house", Type.GetType("System.String"));
DataColumn dc3 = new DataColumn("seq", Type.GetType("System.String"));
DataColumn dc4 = new DataColumn("remark", Type.GetType("System.String"));
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Columns.Add(dc4);
DataRow dr = dt.NewRow();
dr["areaid"] = "北京";
dr["seq"] = "第一期";
dr["remark"] = "货到付款";
dt.Rows.Add(dr);
DataRow dr1 = dt.NewRow();
dr1["areaid"] = "北京";
dr1["seq"] = "第一期";
dr1["remark"] = "货到付款";
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["areaid"] = "上海";
dr2["seq"] = "第二期";
dr2["remark"] = "货到付款";
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3["areaid"] = "上海";
dr3["seq"] = "第四期";
dr3["remark"] = "货到付款";
dt.Rows.Add(dr3);
var query = from t in dt.AsEnumerable()
group t by new { t1 = t.Field<string>("areaid"), t2 = t.Field<string>("seq"), t3 = t.Field<string>("remark") } into m
select new
{
areaid = m.Key.t1,
seq = m.Key.t2,
remark = m.Key.t3,
rowcount = m.Count()
};
foreach (var item in query.ToList())
{
if (item.rowcount > 1)
{
//MessageBox.Show(item.areaid + "---" + item.house);
Console.WriteLine(item.areaid + "---" + item.seq + "---" + item.remark + "---" + item.rowcount);
Console.WriteLine("\r\n");
}
//Console.WriteLine(item.areaid + "---" + item.seq + "---" + item.rowcount);
//Console.WriteLine("\r\n");
}
}
结果:把重复的内容数据,并且输出重复的个数。 当然我的需求是把这些数据拿到然后附加的历史表里