datatable中怎么select出无重复记录啊

转载 2007年10月16日 11:31:00
就象 select distinct 字段名 from 表名  一样
在datatable中的select 应该怎么做啊
 

 
 回复内容
【wwwiii520】:
占個沙發```搞不懂lz意思

【ezhuyin】:
public DataTable SelectDistinct(string TableName, DataTable SourceTable, string FieldName)
{
        DataTable dt = new DataTable(TableName);
        dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);

        object LastValue = null; 
        foreach (DataRow dr in SourceTable.Select("", FieldName))
        {
            if (  LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])) ) 
            {
                LastValue = dr[FieldName]; 
                dt.Rows.Add(new object[]{LastValue});
            }
        }
        if (ds != null) 
            ds.Tables.Add(dt);
        return dt;
}

【outh24】:
如果有LINQ的话就好办……
没有的话,有个笨方法,定义另一个datatable,
从现在的数据源里取不重复的部分写入到新的dt中

【fuda_1985】:
关注!

【scjyjl】:
没找到ColumnEqual,请问要using什么才有这个啊,而且我在MSDN中也没索引到,可以讲讲吗

【ezhuyin】:
思路:首先建立一个临时数据表,然后把源DataTable Sort起来,然后逐行读取源数据,并且跟最后一次添加的数据比较,如果相同,则不添加,如果不同,则添加进临时表。做点小改动,则可以适应更多环境。

public DataTable SelectDistinct(string TableName, DataTable SourceTable, string[] FieldNames)
{
DataTable dt = new DataTable(TableName);
System.Text.StringBuilder FiledNameBuilder = new System.Text.StringBuilder("");
string SortStr = "";

foreach (string FieldName in FieldNames)
{
dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);
FiledNameBuilder.Append(FieldName + ",");
}

if (FiledNameBuilder.ToString().Length>0)
{
SortStr = FiledNameBuilder.ToString();
SortStr = SortStr.Substring(0,SortStr.Length-1);
}

object[] LastValue = new object[FieldNames.Length];

foreach (DataRow dr in SourceTable.Select("",SortStr))
{
if (LastValue == null || !IsEqual(dr,LastValue))
{
for (int i = 0; i < LastValue.Length; i++)
{
LastValue[i] = dr[FieldNames[i]];
}
dt.Rows.Add(LastValue);
}
}
if (ds != null)
ds.Tables.Add(dt);
return dt;
}

private bool IsEqual(DataRow dr, object[] Value)
{
bool Equal = true;
int current = 0;

while (Equal && current < Value.Length)
{
if (!dr[current].Equals(Value[current]))
{
Equal = false;
}
else
{
current++;
}
}

return Equal;
}

【ezhuyin】:
没找到ColumnEqual,请问要using什么才有这个啊,而且我在MSDN中也没索引到,可以讲讲吗

哈,不好意思,那个是单独的方法:

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) );  // 正常比较
}

【ezhuyin】:
if (!dr[current].Equals(Value[current]))

又一个错误,修改成

if (!ColumnEqual(dr[current],Value[current]))

【scjyjl】:
谢谢ezhuyin
 

datatable中移除重复行 ,并能合并重复行

  • 2012年05月16日 14:20
  • 34KB
  • 下载

DataTable.select如何选择后放在指定DataTable

完成一个查询,返回一个DataTable后,很多时候都想在查询结果中继续搜索。这时可以使用DataTable.Select方法对结果进行再查询。 Select方法有4个重载,我们经常用到的就...
  • orichisonic
  • orichisonic
  • 2015-09-25 11:28:07
  • 651

c# DataTable中select 返回新的DataTable(DataTable筛选,排序)

/// 执行DataTable中的查询返回新的DataTable        ///         /// 源数据DataTable        /// 查询条件        ///     ...
  • jackin2
  • jackin2
  • 2010-05-04 13:13:00
  • 20217

C# DataTable Select用法

使用背景: 完成一个查询,返回一个DataTable后,很多时候都想在查询结果中继续搜索。这时可以使用DataTable.Select方法对结果进行再查询。DataRow[] dr = ds.Tabl...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2014-01-08 09:38:45
  • 6292

DataTable中执行DataTable.Select("条件")返回DataTable的方法

string  strExpr  =  "Country  =  'zh-CN ' ";  string   strSort   =   "CompanyName   DESC ";  Dat...
  • lenglengdeyu
  • lenglengdeyu
  • 2013-01-11 10:13:53
  • 1538

Datatable.Select() 用法

Select(); ' 基本格式 :Select("查找条件where的字符串") eg: Dim dt As New DataTable() ' dt列追加,其中一列的列名为:sea...
  • jsjpanxiaoyu
  • jsjpanxiaoyu
  • 2017-02-15 15:08:44
  • 816

在DataTable中查询应该注意的问题 (DataTable.select)

【简 介】 完成一个查询,返回一个DataTable后,很多时候都想在查询结果中继续搜索。这时可以使用DataTable.Select方法对结果进行再查询。 Select方法有4个重载,我...
  • yeeonefx
  • yeeonefx
  • 2014-10-21 08:46:34
  • 2271

c# DataTable中Select的使用

1、  DataTable关于Select的使用。          (1)、查询量为常量                           DataTable   dt = new DataTab...
  • wxstar8
  • wxstar8
  • 2017-02-15 10:32:45
  • 567

Datatable.select()用法——c#

1)  Select()——获取所有 System.Data.DataRow 对象的数组。 2)  Select(string filterExpression)——按照主键顺序(如果没有主键,则按...
  • zibinghanmo
  • zibinghanmo
  • 2014-10-28 21:41:11
  • 3199

DataTable select() 的使用 DataTabel中distinct用法去重复的的字段或者记录 .

 DataTabel中distinct 在.NET Framework2.0中,选择DataTable等数据源中的唯一值(类似SQL中Distinct的返回结果)非常简单,如下即可: D...
  • cuoban
  • cuoban
  • 2015-05-13 08:47:47
  • 2352
收藏助手
不良信息举报
您举报文章:datatable中怎么select出无重复记录啊
举报原因:
原因补充:

(最多只允许输入30个字)