C# 过滤DataTable中的相同行(gethashcode)
发布网友
发布时间:2022-04-27 14:17
我来回答
共2个回答
热心网友
时间:2022-04-27 15:46
写个方法
/// <summary>
/// 返回执行Select distinct后的DataTable
/// </summary>
/// <param name="SourceTable">源数据表</param>
/// <param name="FieldNames">字段集</param>
/// <returns></returns>
private DataTable SelectDistinct(DataTable SourceTable, params string[] FieldNames)
{
object[] lastValues;
DataTable newTable;
DataRow[] orderedRows;
if (FieldNames == null || FieldNames.Length == 0)
throw new ArgumentNullException("FieldNames");
lastValues = new object[FieldNames.Length];
newTable = new DataTable();
foreach (string fieldName in FieldNames)
newTable.Columns.Add(fieldName, SourceTable.Columns[fieldName].DataType);
orderedRows = SourceTable.Select("", string.Join(",", FieldNames));
foreach (DataRow row in orderedRows)
{
if (!fieldValuesAreEqual(lastValues, row, FieldNames))
{
newTable.Rows.Add(createRowClone(row, newTable.NewRow(), FieldNames));
setLastValues(lastValues, row, FieldNames);
}
}
return newTable;
}
private bool fieldValuesAreEqual(object[] lastValues, DataRow currentRow, string[] fieldNames)
{
bool areEqual = true;
for (int i = 0; i < fieldNames.Length; i++)
{
if (lastValues[i] == null || !lastValues[i].Equals(currentRow[fieldNames[i]]))
{
areEqual = false;
break;
}
}
return areEqual;
}
private DataRow createRowClone(DataRow sourceRow, DataRow newRow, string[] fieldNames)
{
foreach (string field in fieldNames)
newRow[field] = sourceRow[field];
return newRow;
}
private void setLastValues(object[] lastValues, DataRow sourceRow, string[] fieldNames)
{
for (int i = 0; i < fieldNames.Length; i++)
lastValues[i] = sourceRow[fieldNames[i]];
}
热心网友
时间:2022-04-27 17:04
5和6呢??5 6也没有重复呀
规则是什么
C#datatable的问题,datatable1(dt1)主表datatable2(dt2)次表
1、最笨的一种是循环遍历,两层 for 循环。2、如果存在唯一性 Key 的话(可以理解为主键),那么把 dt2 中的这些 Key 取出,从 dt1(或其副本)中删除,剩下的自然就是非重复项。3、先对两表中的某一字段进行排序,然后用二分法做检索,相当于对第一种方法做了搜索优化。4、如果是 .NET 3....
vlookup 的用法
VLOOKUP是Excel中用于垂直查找的函数,其基本用法包括四个参数:1. 查找值:即在数据表首列中需要搜索的值。2. 数据表:包含查找值的单元格区域或数组。3. 返回值所在列数:指定返回查询区域中第几列的值。4. 查找方式:选择精确匹配(FALSE)或近似匹配(TRUE),前者要求完全匹配,后者则返回最接近且不大于查找值的项。VLOOKUP能够精确查找与大致匹配数据,并跨列提取相关信息,是数据处理中非常实用的工具。Excel一键自动匹配,在线免费vlookup工具,3步完成!Excel在线免费vlookup工具,点击4步自动完成vlookup匹配,无需手写公式,免费使用!
C#如何把两个datatable1与datatable2中不同的数据取出来,他们都有唯一...
static void Main(string[] args) { DataTable datatable1, datatable2; var row1 = datatable1.Rows.Cast<DataRow>(); var row2 = datatable2.Rows.Cast<DataRow>(); var except1 = row1.Except(row2, new DataRowEqualityComparer());//1在2中不存在的 var except...
C#中List<T>的作用与用法,求详解 谢谢
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)GetRange 创建源 List<T> 中的元素范围的浅表副本。GetType 获取当前实例的 Type。 (继承自 Object。)IndexOf(T) 搜索指定的对象,并返回整个 List<T> 中第一个匹配项的从零开始的索引。IndexOf(T, Int32) 搜索指定的对象,...