利用dataview为datatable排序

今天看到有朋友在群中问,要如何从DataTable筛选出不重复的行。因为在SQL中有distinct关键字,所以很多朋友就自然想到了用 dt.Select("distinct 字段")来处理,结果失败了,因为dt.Select是不支持distinct关键字的。

又有朋友提到,循环所有行,对比每一行与上一列值的值,例如:

DataRow[] drs=new DataRow[dt.Rows.Count];
for (int i = 1; i < dt.Rows.Count; i++)
{
if (dt.Rows[i]["关键列"].ToString() == dt.Rows[i - 1]["关键列"].ToString())
{
drs[i - 1] = dt.Rows[i];
}
}


drs中存储的就是我们想要的所有不重复行的数据了。

该方法当然可行,但显的复杂了。这里向大家讲解一个最简单的方法,就是利用DataView的ToTable方法来自动过滤所有重复行的数据,代码如下:

DataTable dt = "您的来源dt";
DataTable dt_new = dt.DefaultView.ToTable(true, "关键列1", "关键列2");


dt_new中存储的就是我们想要的所有不重复行的数据了。

讲解:
1.DefaultView的返回类型是DataView,而DataView的定义就是:
表示用于排序、筛选、搜索、编辑和导航的System.Data.DataTable的可绑定数据的自定义视图。
所以我们在要用到对DataTable进行排序、筛选、搜索、编辑和导航操作时,就要想到用DataView.

2.public DataTable ToTable(bool distinct, params string[] columnNames)方法:
从参数名我们就可以猜出它的意思了。
distinct:表示返回的Data.DataTable是否包含所有列都具有不同值的行,默认为false。
columnNames:表示要包括在返回的System.Data.DataTable中的列名的列表。如果distinct为true,则它会根据columnNames指定的列名进行筛选过滤。

该方法还有其它的重载方法,大家可以自行查询

 

今天看到有朋友在群中问,要如何从DataTable筛选出不重复的行。因为在SQL中有distinct关键字,所以很多朋友就自然想到了用 dt.Select("distinct 字段")来处理,结果失败了,因为dt.Select是不支持distinct关键字的。

又有朋友提到,循环所有行,对比每一行与上一列值的值,例如:

DataRow[] drs=new DataRow[dt.Rows.Count];
for (int i = 1; i < dt.Rows.Count; i++)
{
if (dt.Rows[i]["关键列"].ToString() == dt.Rows[i - 1]["关键列"].ToString())
{
drs[i - 1] = dt.Rows[i];
}
}


drs中存储的就是我们想要的所有不重复行的数据了。

该方法当然可行,但显的复杂了。这里向大家讲解一个最简单的方法,就是利用DataView的ToTable方法来自动过滤所有重复行的数据,代码如下:

DataTable dt = "您的来源dt";
DataTable dt_new = dt.DefaultView.ToTable(true, "关键列1", "关键列2");


dt_new中存储的就是我们想要的所有不重复行的数据了。

讲解:
1.DefaultView的返回类型是DataView,而DataView的定义就是:
表示用于排序、筛选、搜索、编辑和导航的System.Data.DataTable的可绑定数据的自定义视图。
所以我们在要用到对DataTable进行排序、筛选、搜索、编辑和导航操作时,就要想到用DataView.

2.public DataTable ToTable(bool distinct, params string[] columnNames)方法:
从参数名我们就可以猜出它的意思了。
distinct:表示返回的Data.DataTable是否包含所有列都具有不同值的行,默认为false。
columnNames:表示要包括在返回的System.Data.DataTable中的列名的列表。如果distinct为true,则它会根据columnNames指定的列名进行筛选过滤。

该方法还有其它的重载方法,大家可以自行查询

转载于:https://www.cnblogs.com/wangchuang/archive/2013/04/20/3032613.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值