DataSet中过滤掉重复项的问题,请教大家了

accd520 2010-02-01 11:21:02
我用ds.Tables[0].Select("GuiGe='" + guiGe + "'"))方式来选出ds中我需要的数据,但是有一些是重复的,我想重复的记录只选一条就可以了,请问这要怎么办啊?
...全文
336 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
MicroSoftor 2010-02-02
  • 打赏
  • 举报
回复
方法一、
直接循环所有行,过滤掉所有重复记录,不过,当记录很多时效率低;

方法二、
利用Linq中提供的distinct方法
IEnumerable<DataRow> query = dt.AsEnumerable().Distinct<DataRow>(new MyComparer());
这样得到的query对象中,根据自己的过滤逻辑即可得到不重复数据。


下面是例子
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Id", typeof(string)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));

DataRow dr = dt.NewRow();
dr["Id"] = "1";
dr["Name"] = "test1";
dt.Rows.Add(dr);

DataRow dr1 = dt.NewRow();
dr1["Id"] = "2";
dr1["Name"] = "test2";
dt.Rows.Add(dr1);

DataRow dr2 = dt.NewRow();
dr2["Id"] = "2";
dr2["Name"] = "test3";
dt.Rows.Add(dr2);


IEnumerable<DataRow> query = dt.AsEnumerable().Distinct<DataRow>(new MyComparer());

foreach (var item in query)
{
Console.WriteLine(item["id"].ToString());
}
}
}

public class MyComparer : IEqualityComparer<DataRow>
{
#region IEqualityComparer<DataRow> 成员

public bool Equals(DataRow x, DataRow y)
{
return x["id"].ToString() == y["id"].ToString();
}

public int GetHashCode(DataRow obj)
{
return obj["id"].ToString().GetHashCode();
}

#endregion
}
}

或许还有更好的方法
xu56180825 2010-02-02
  • 打赏
  • 举报
回复
可用循环把重复要删除的项加进一个集合中,在用循环删除
流水小筑 2010-02-02
  • 打赏
  • 举报
回复
在填充ds时就把重复的项去掉,这样不更好吗
wzp144650 2010-02-01
  • 打赏
  • 举报
回复
为什么不自己写个小方法不就过滤了?
zcw840421 2010-02-01
  • 打赏
  • 举报
回复

111,122

社区成员

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

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

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