當前位置:首頁 » 凈水方式 » datatable過濾重復行

datatable過濾重復行

發布時間: 2020-12-30 23:17:46

Ⅰ c#中datatable如何去除重復數據

兩種方法1資料庫直接去除重復selectdistinct*from表名去除了重復行distinct2對DataTable直接版進行操作DataTabledt=db.GetDt("select*from表名");//獲得datatableDataViewdv=newDataView(dt);//虛擬視圖吧,我這權么認為Dat

Ⅱ DataTable判斷是否有重復數據

1.DatatTable 某個欄位是否重復
DataTable dtTableDisinit = (DataTable)this.c1TrueDBGrid1.DataSource;
DataView dv = new DataView(dtTableDisinit);
if (dv.Count != dv.ToTable(true, "PMD_SingProct").Rows.Count)
{
Common.showMessageInfo("網格中存在重復的品番!");
return;
}

2.數組中去重復的數據專和判斷一屬個數組中是否有重復的數據
string[] strSing = this.PM_CollectionGoods.Text.ToString().Trim().Split(',');
string[] strDis = strSing.Distinct().ToArray();
if (strSing.Length != strDis.Length)
{
Common.showMessageInfo("數組中存在重復的數據");
return;
}

Ⅲ 關於如何刪除DataTable中的重復行

以前合作做一個程序的時候,由於資料庫設計原因。讓我碰到了一個比較棘手的問題,就是最後我的數據Table裡面存在了一行或多行重復行,那麼怎麼刪除這些重復行了。從網上找了許多材料,還是用了一個最笨的辦法,把Table的行檢索一遍把重復的行刪除掉(在微軟的社區里也有這樣的例子)。最壞的情況時間復雜度為o(行X列)。如果數據量比較小的話,這樣的性能還可以忍受。但是數據量大的話。其速度也就不言而喻了。 檢索部分代碼如下: 1public DataTable SelectDistinct(DataTable SourceTable, string FieldName) 2 { 3 DataTable dt =new DataTable(); 4for (Int32 i =0; i < SourceTable.Columns.Count; i++) 5 { 6string fieldName=SourceTable.Columns[i].Caption; 7 dt.Columns.Add(fieldName, SourceTable.Columns[fieldName].DataType); 8 } 910 DataRow dataRow = dt.NewRow(); 11foreach (DataRow dr in SourceTable.Select("", FieldName)) 12 { 13if (dataRow ==null||!(ColumnEqual(dataRow[FieldName], dr[FieldName]))) 14 { 15 dataRow=dr; 16 DataRow row = dt.NewRow(); 17for (int i =0; i < dataRow.ItemArray.Length; i++) 18 { 19 row[i] = dataRow[i]; 20 } 21 dt.Rows.Add(row); 22 } 23 } 24return dt; 25 } 上面的代碼性能低。就不再多做剖析了。 下面來看看.Net提供的一個方法。個人認為還是比沒有的好。只是多了一個轉的過程起碼自己不用再像上面所使用方法一行一行來找了。好了,言歸正傳。看下面的代碼 privatevoid ShowDataViewSource() { //Table DataTable dataTable =new DataTable("dataTable"); DataColumn dataColumn =new DataColumn("dataColumn"); DataColumn dataColumn2 =new DataColumn("dataType"); dataTable.Columns.Add(dataColumn); dataTable.Columns.Add(dataColumn2); DataRow dataRow; for (int i =0; i <10; i++) { dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="item "+ i; if (i <7) { dataRow["dataType"] ="1"; } else { dataRow["dataType"] ="2"; } dataTable.Rows.Add(dataRow); } //將Table填充到DataView並添加新的數據 DataView dataView =new DataView(dataTable); //添加n行數據 dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="World"; dataRow["dataType"] ="3"; dataTable.Rows.Add(dataRow); //在這里添加重復數據 dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="martin"; dataRow["dataType"] ="1"; dataTable.Rows.Add(dataRow); dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="martin"; dataRow["dataType"] ="1"; dataTable.Rows.Add(dataRow); dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="martin"; dataRow["dataType"] ="1"; dataTable.Rows.Add(dataRow); dataRow = dataTable.NewRow(); dataRow["dataColumn"] ="martin"; dataRow["dataType"] ="1"; dataTable.Rows.Add(dataRow); //第一個數據源 dg1.DataSource = dataView; //去掉重復行的DataView DataView myDataView =new DataView(dataTable); string[] strComuns ={ "dataColumn", "dataType" }; dg2.DataSource = myDataView.ToTable(true, strComuns); } 主要做的工作就是把存在重復行數據的DataTable送給Dataview.然後使用DataView類的一個ToTable方法中的一個重載方法。就是上面用的,一共有兩個參數,第一個bool類型參數就是指定裝換成DataTable後是否保留重復行,第二個參數是一個字元串數組,用來指定轉換成 DataTable後保留原有表中的哪些欄位。欄位名不區分大小寫。

Ⅳ 如何去掉DataTable中的重復行

dsTopSearch.Merge(dal.GetTopSearch(keyword,condition));}return dsTopSearch.Tables[0].DefaultView.ToTable(true, "ID","Name","Author","Publisher","PublishDate","TypeName","Price","SalePrice","SavePrice","Rebate","ImagePath","ContentIntro");}先把DataTable轉成DataView,再通來過DataView.ToTable()轉回自DataTable,ToTable()方法中有一個重載可以輕松消除重復行. 注:該重載的第二個參數為要保存的欄位名.

Ⅳ DataTable 根據某列Select 出重復數據,保留不重復的數據

你是要動態判斷列嗎?
select * from table where 列名 = 值
這個行不行?
還要根據每列找出不重復的值
select distinct 列名 from table

Ⅵ C# 處理DataTable 重復數據

你可以用HashSet<T>來存儲已存在的行 檢索速度會快很多 代碼如下 不知道你的機子什麼配置 我的機子Debug模式100000行數據 用了232毫秒using System;
using System.Data;
using System.Collections.Generic;
using System.Diagnostics;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable dataTable = new DataTable();
dataTable.Columns.AddRange(new DataColumn[] {
new DataColumn("A"),
new DataColumn("B"),
new DataColumn("C"),
new DataColumn("D")
});
for (int i = 0; i < 50000; i++)
{
dataTable.Rows.Add(new object[] { 0, 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + i.ToString(), 0 });
dataTable.Rows.Add(new object[] { 0, 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + (50000 - i).ToString(), 0 });
}
Stopwatch stopwatch = new Stopwatch();
stopwatch.Reset();
stopwatch.Start();
Console.WriteLine("DataTable行數:{0}", dataTable.Rows.Count);
HashSet<string> hash = new HashSet<string>();//.NET 3.0以上使用
//Dictionary<string, int> dic = new Dictionary<string, int>();//.NET 2.0可以用這個
for (int i = 0; i < dataTable.Rows.Count; i++)
{
//if (dic.ContainsKey(dataTable.Rows[i][2] as string))//.NET 2.0
//{
// dic.Add(dataTable.Rows[i][2] as string, 0);
//}
if (!hash.Contains(dataTable.Rows[i][2] as string))
{
hash.Add(dataTable.Rows[i][2] as string);
}
else
{
dataTable.Rows.RemoveAt(i);
i--;
}
}
stopwatch.Stop();
Console.WriteLine("用時:{0}毫秒", stopwatch.ElapsedMilliseconds);
Console.WriteLine("DataTable行數:{0}", dataTable.Rows.Count);
Console.ReadKey();
}
}
}

Ⅶ DataTable中如何去除重復的項

1 資料庫直接去除重復
select distinct * from 表名
去除了重復行distinct

2 對 DataTable直接進行操作
DataTable dt=db.GetDt("select * from 表名"); //獲得datatable
DataView dv = new DataView(dt); //虛擬視圖吧,我這么認為
DataTable dt2 = dv.ToTable(true, "name,age,hobby");
這個時候 dt2就是去除了重復的行了

Ⅷ DataTable如何去除重復的行

兩種方法
1 資料庫直接去除重復
select distinct * from 表名
去除了重復行distinct

2 對 DataTable直接進行操作
DataTable dt=db.GetDt("select * from 表名"); //獲得datatable
DataView dv = new DataView(dt); //虛擬視圖內吧,我這么認容為
DataTable dt2 = dv.ToTable(true, "name,age,hobby");
這個時候 dt2就是去除了重復的行了
解釋一下
dv.ToTable(true, "name,age,hobby");
第一個參數,true 去除重復,false 不去除
第二個參數, 看意思能明白,你需要顯示的欄位,我這里顯示"name,age,hobby"

Ⅸ C# winform 去掉datatable裡面的重復數據問題

兩種方法
1 數據抄庫直接襲去除重復
select distinct * from 表名
去除了重復行distinct

2 對 DataTable直接進行操作
DataTable dt=db.GetDt("select * from 表名"); //獲得datatable
DataView dv = new DataView(dt); //虛擬視圖吧,我這么認為
DataTable dt2 = dv.ToTable(true, "name,age,hobby");
這個時候 dt2就是去除了重復的行了
解釋一下
dv.ToTable(true, "name,age,hobby");
第一個參數,true 去除重復,false 不去除
第二個參數, 看意思能明白,你需要顯示的欄位,我這里顯示"name,age,hobby"

Ⅹ 怎樣將DataTable中的重復數據篩選出來

vargroupByResult=dataTable.Rows.Cast<DataRow>().GroupBy<DataRow,string>(dr=>dr["name"].ToString());
foreach(varrowsingroupByResult)
{
if(rows.Count()>1)
{
//以來name為篩選源條件的數據存在多條

}
}

熱點內容
丁度巴拉斯情人電影推薦 發布:2024-08-19 09:13:07 瀏覽:886
類似深水的露點電影 發布:2024-08-19 09:10:12 瀏覽:80
《消失的眼角膜》2電影 發布:2024-08-19 08:34:43 瀏覽:878
私人影院什麼電影好看 發布:2024-08-19 08:33:32 瀏覽:593
干 B 發布:2024-08-19 08:30:21 瀏覽:910
夜晚看片網站 發布:2024-08-19 08:20:59 瀏覽:440
台灣男同電影《越界》 發布:2024-08-19 08:04:35 瀏覽:290
看電影選座位追女孩 發布:2024-08-19 07:54:42 瀏覽:975
日本a級愛情 發布:2024-08-19 07:30:38 瀏覽:832
生活中的瑪麗類似電影 發布:2024-08-19 07:26:46 瀏覽:239