C#中去掉表中重复的数据
/// <summary>
/// 去掉表中重复的数据 int
/// </summary>
/// <param name="SourceTable">原始表</param>
/// <param name="FieldName">重复的字段</param>
/// <returns></returns>
public DataTable SelectDistinct(DataTable SourceTable, string FieldName)
{
DataTable dt = new DataTable();
for (Int32 i = 0; i < SourceTable.Columns.Count; i++)
{
string fieldName=SourceTable.Columns[i].Caption;
dt.Columns.Add(fieldName, SourceTable.Columns[fieldName].DataType);
}
DataRow dataRow = dt.NewRow();
foreach (DataRow dr in SourceTable.Select("", FieldName))
{
string str=dr[FieldName].ToString();
if(str != string.Empty)
{
if(int.Parse(str)!=0)
{
if (dataRow == null || !(ColumnEqual(dataRow[FieldName], dr[FieldName])))
{
dataRow=dr;
DataRow row = dt.NewRow();
for (int i = 0; i < dataRow.ItemArray.Length; i++)
{
row[i] = dataRow[i];
}
dt.Rows.Add(row);
}
}
}
}
return dt;
}
/// <summary>
/// 去掉表中重复的数据 字段 string
/// </summary>
/// <param name="SourceTable">原始表</param>
/// <param name="FieldName">重复的字段</param>
/// <returns></returns>
public DataTable SelectDistinctStr(DataTable SourceTable, string FieldName)
{
DataTable dt = new DataTable();
for (Int32 i = 0; i < SourceTable.Columns.Count; i++)
{
string fieldName=SourceTable.Columns[i].Caption;
dt.Columns.Add(fieldName, SourceTable.Columns[fieldName].DataType);
}
DataRow dataRow = dt.NewRow();
foreach (DataRow dr in SourceTable.Select("", FieldName))
{
string str=dr[FieldName].ToString();
if(str != string.Empty)
{
if (dataRow == null || !(ColumnEqual(dataRow[FieldName], dr[FieldName])))
{
dataRow=dr;
DataRow row = dt.NewRow();
for (int i = 0; i < dataRow.ItemArray.Length; i++)
{
row[i] = dataRow[i];
}
dt.Rows.Add(row);
}
}
}
return dt;
}
private bool ColumnEqual(object A, object B)
{
if(A == DBNull.Value && B == DBNull.Value) // 两个都是 DBNull.Value
return true;
if(A == DBNull.Value || B == DBNull.Value) // 只有一个是 DBNull.Value
return false;
return (A.Equals(B));// 正常比较
}
/// <summary>
/// 表中筛选数据
/// </summary>
/// <param name="SourceTable">原始表</param>
/// <param name="FieldName1">表里的字段名</param>
/// <param name="FieldName2">筛选的数据</param>
/// <returns></returns>
public DataTable SelectByField(DataTable SourceTable,string FieldName1, string FieldName2)
{
DataTable dt = new DataTable();
for (Int32 i = 0; i < SourceTable.Columns.Count; i++)
{
string fieldName=SourceTable.Columns[i].Caption;
dt.Columns.Add(fieldName, SourceTable.Columns[fieldName].DataType);
}
foreach (DataRow dr in SourceTable.Select(" "+FieldName1+" = '" + FieldName2 + "'"))
{
DataRow row = dt.NewRow();
for (int i = 0; i < dr.ItemArray.Length; i++)
{
row[i] = dr[i];
}
dt.Rows.Add(row);
}
return dt;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?