Commit 878b60ad authored by tr's avatar tr

1、增加复制相同列通用方法及非法行判断方法

parent 62332030
...@@ -4,3 +4,4 @@ ...@@ -4,3 +4,4 @@
/FunnyPick/.vs/FunnyPick/v16/Server/sqlite3 /FunnyPick/.vs/FunnyPick/v16/Server/sqlite3
/FunnyPick/.vs/FunnyPick/v16/.suo /FunnyPick/.vs/FunnyPick/v16/.suo
/FunnyPick/.vs/FunnyPick/DesignTimeBuild/.dtbcache
using System; using System;
using System.Collections.Generic;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
...@@ -60,5 +61,55 @@ namespace FunnyPick ...@@ -60,5 +61,55 @@ namespace FunnyPick
// result : "name1,name2,name3" // result : "name1,name2,name3"
} }
/// <summary>
/// 复制相同列
/// </summary>
/// <param name="dtFrom">源表</param>
/// <param name="dtTarget">目标表</param>
/// <param name="distinctCol">去重列</param>
/// <param name="ExceptColList">去除列(即包含在此列表中的列不复制)</param>
public void CopySameCol2Table(DataTable dtFrom, DataTable dtTarget, string distinctCol, List<string> ExceptColList = null)
{
foreach (DataRow r in dtFrom.Rows)
{
if (IsIllegalDataRow(r))
continue;
//如果去重列不为空,并且两表都包含该列,则取出重复值
if (!string.IsNullOrEmpty(distinctCol) && dtFrom.Columns.Contains(distinctCol) && dtTarget.Columns.Contains(distinctCol))
{
if (dtTarget.Select($"{distinctCol}='{r[distinctCol]}'").Length > 0)
continue;
}
//创建目标新行
DataRow drNew = dtTarget.NewRow();
foreach (DataColumn c in dtFrom.Columns)
{
string ColName = c.ColumnName;
//ID和指定忽略的列,不复制
if (ColName.Equals("ID") || ExceptColList?.IndexOf(ColName) >= 0)
continue;
if (dtTarget.Columns.Contains(ColName))
{
drNew[ColName] = r[ColName];
}
}
drNew.EndEdit();
dtTarget.Rows.Add(drNew);
}
}
/// <summary>
/// 是否无效行
/// </summary>
/// <param name="dr"></param>
/// <returns></returns>
public bool IsIllegalDataRow(DataRow dr)
{
return dr == null
|| dr.RowState == DataRowState.Deleted
|| dr.RowState == DataRowState.Detached;
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment