用LINQ( group by having) 找出Datatable中的重復數據


private void butCF_Click(object sender, RoutedEventArgs e)
        {
            if (DatagridDatatable != null && DatagridDatatable.Rows.Count > 0)
            {
//group by 日期,合同號,部門 having count(記錄編號)>0 找出 日期 合同號 部門重復的記錄
var query = (from t in DatagridDatatable.AsEnumerable() group t by new { t1 = t.Field<DateTime>("日期"), t2 = t.Field<Int64>("合同號"), t3 = t.Field<string>("部門") } into m select new { 日期 = m.Key.t1, 合同號 = m.Key.t2, 部門 = m.Key.t3, 記錄編號=m.First().Field<Decimal>("記錄編號"),//這里要寫這句話,否則查不出query rowcount = m.Count() } into c where c.rowcount>1 select c).ToList(); DataTable dt = new DataTable(); ////dt.Columns.Add("序號",System.Type.GetType( "System.Int32")); dt.Columns.Add("日期", System.Type.GetType("System.DateTime")); dt.Columns.Add("合同號", System.Type.GetType("System.Int64")); dt.Columns.Add("部門", System.Type.GetType("System.String")); dt.Columns.Add("記錄編號", System.Type.GetType("System.Decimal")); dt.Columns.Add("銷售金額", System.Type.GetType("System.Decimal")); foreach (var q in query) { DataRow[] dr_finds = DatagridDatatable.Select("日期='" + q.日期 + "' and 合同號=" + q.合同號 + " and 部門='" + q.部門+"'"); foreach (DataRow find in dr_finds) { DataRow dr = dt.NewRow(); dr["日期"] = find["日期"]; dr["合同號"] = find["合同號"]; dr["部門"] = find["部門"]; dr["記錄編號"] = find["記錄編號"]; dr["銷售金額"] = find["銷售金額"]; dt.Rows.Add(dr); } } if (dt.Rows.Count > 0) { fmCFJL win=new fmCFJL(dt); win.Show(); } else { MessageBox.Show("沒有重復記錄"); return; } } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM