如何使用LINQ 实现从datatable中获取列有重复值的行

阿布Guu 2015-08-31 12:24:35
代码 类型 规格型号
1.010.000001 冷水表 NB57-铁壳-DN15-485接口
1.010.000002 冷水表 NB57-铁壳-DN15-Mbus接口
1.010.000004 冷水表 NB57-铜壳-DN15-Mbus接口
1.010.000005 冷水表 NB57-铁壳-DN20-485接口
1.010.000006 冷水表 NB57-铁壳-DN15-Mbus接口
1.010.000008 冷水表 NB57-铜壳-DN15-Mbus接口
1.010.000009 冷水表 NB57-铜壳-DN15-Mbus接口
1.010.000010 冷水表 NB57-铁壳-DN15-Mbus 接口

按规格型号为标准进行筛选,有重复的取出来,
结果如下

1.010.000002 冷水表 NB57-铁壳-DN15-Mbus接口
1.010.000006 冷水表 NB57-铁壳-DN15-Mbus接口
1.010.000010 冷水表 NB57-铁壳-DN15-Mbus 接口
1.010.000004 冷水表 NB57-铜壳-DN15-Mbus接口
1.010.000008 冷水表 NB57-铜壳-DN15-Mbus接口
1.010.000009 冷水表 NB57-铜壳-DN15-Mbus接口

初学LINQ, 我只做到处理只有一列的表,多列的就不会了。。
下面是我目前实现的处理一列的代码
 var result = from r in dt.AsEnumerable()
group r by r.Field<string>("规格型号").Replace(" ", "") into g
where g.Count() > 1
select g;
//遍历分组结果集
foreach (var item in result)
{
DataRow[] dr_finds = dt.Select("规格型号='" + item.Key + "' ");
foreach (DataRow dr in dr_finds)
{
DataRow drNew = dtSorted.NewRow();
drNew["代码"] = dr["代码"];
//drNew["名称"] = dr["名称"];
//drNew["全名"] = dr["全名"];
//drNew["规格型号"] = dr["规格型号"];
dtSorted.Rows.Add(drNew);
}

}


还请高手帮忙!谢谢!
...全文
610 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajianchina 2015-08-31
  • 打赏
  • 举报
回复
先给一个方法 http://blog.csdn.net/ajianchina/article/details/47100251
阿布Guu 2015-08-31
  • 打赏
  • 举报
回复
已经解决了,谢谢版主的回答。
阿布Guu 2015-08-31
  • 打赏
  • 举报
回复
[quote=引用 2 楼 duanzi_peng 的回复:] 这样的方式我也试过了,但是因为对语法了解的太少,改来改去总是不对。下面我贴个代码,这个没实现筛选功能,而是把原数据全查询出来了,版主帮忙看下!

            var result = (from r in dt.AsEnumerable()
                          group r by new
                          {
                              code = r.Field<string>("代码"),
                              name = r.Field<string>("名称"),
                              exname = r.Field<string>("全名"),
                              gtype = r.Field<string>("规格型号")

                          } into g
                          select new
                          {
                              code = g.Key.code,
                              name = g.Key.name,
                              exname = g.Key.exname,
                              gtype = g.Key.gtype

                          } into c
                          where c.gtype.Count() > 1
                          select c).ToList();
            foreach (var q in result)
            {
                DataRow[] dr_finds = dt.Select("代码='" + q.code + "' and 名称='" + q.name + "' and 全名='" + q.exname + "' and 规格型号 ='" + q.gtype + "'  ");

                foreach (DataRow dr in dr_finds)
                {
                    DataRow drNew = dtSorted.NewRow();
                    drNew["代码"] = dr["代码"];
                    drNew["名称"] = dr["名称"];
                    drNew["全名"] = dr["全名"];
                    drNew["规格型号"] = dr["规格型号"];
                    dtSorted.Rows.Add(drNew);
                }
            }
  • 打赏
  • 举报
回复
类似的Select 查询关键字,也可以通过select new {} 或者select new 实体 {} 来实现查询。
  • 打赏
  • 举报
回复
group r by r.Field<string>("规格型号").Replace(" ", "") -》 修改成类似:
group  r by new {
      r.Field<string>("规格型号").Replace(" ", ""),
       r.Field<string>("其它").Replace(" ", "")
}

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧