回 帖 发 新 帖 刷新版面

主题:表的问题

表中有相同的编号.如何将相同的编号只取一个?
我是这样写的.出错,请高手指点
public void myrefrsh(DataTable table)
{
DataRow[] row=table.Select("distenct bh");//此处出错,其中bh是表中字段
foreach(DataRow isrow in row)
{
Console.WriteLine(isrow["bh"].ToString());
}
}
不知道有没有其它的方法!

回复列表 (共6个回复)

沙发

各位大哥!急用啊!帮帮哦

板凳

private void button1_Click(object sender, EventArgs e)
        {
            DataSet1.testDataTable dt = new DataSet1.testDataTable();
            DataSet1TableAdapters.testTableAdapter ta = new testDistInct.DataSet1TableAdapters.testTableAdapter();
            dt = ta.GetData();
           
            bool flag;
            foreach (DataSet1.testRow tr in dt)
            {
                flag = false;
                for (int i = 0; i < comboBox1.Items.Count; i++)
                {
                    if (tr.Name == comboBox1.Items[i].ToString())
                        flag = true;
                }
                if(!flag)
                    comboBox1.Items.Add(tr.Name);
            }
        }


更为通用的方法: 
using System.Collections; 
private ArrayList GetNameList() 


ArrayList NameList = new ArrayList(); 
DataSet1.testDataTable dt = new DataSet1.testDataTable(); 
DataSet1TableAdapters.testTableAdapter ta = new testDistInct.DataSet1TableAdapters.testTableAdapter(); 
dt = ta.GetData(); 

bool flag; 
foreach (DataSet1.testRow tr in dt) 

flag = false; 
for (int i = 0; i <NameList.Count; i++) 

if (tr.Name == NameList[i].ToString()) 
flag = true; 

if (!flag) 
NameList.Add(tr.Name); 

return NameList; 



调用的时候: 
ArrayList NameList = new ArrayList(); 
NameList = GetNameList(); 
for (int i = 0; i < NameList.Count;i++ ) 
comboBox1.Items.Add(NameList[i].ToString()); 

可以实现分层结构设计. 

3 楼

select distinct 字段 from 表

4 楼

谢谢两位!非常感谢.
二楼的方法我试过,可以是可以,不过数据量大的时候会影响速度.
我想问的是DataTable.Select()方法中的筛选条件怎么写Distenct 语句?有没有办法写呢?这样会比较快一点.

5 楼

好像这个过滤表达式不能用Distinct。
在给你个例子:
{
System.Data.DataRow newdr;
newdr=dt.Rows[j];
for(int k=j+1;k<dt.Rows.Count;k++)
{
string d1=newdr["字段名"].ToString();
string d2=dt.Rows[k]["字段名"].ToString();
if(d1==d2)dt.Rows[k].Delete();
}
}

注:dt是你的DataTable

6 楼

DataTable.Select相当于where那一部分,自然不能用distinct

干吗之前不用SELECT DINSTINCT这样的sql语句来填充DataTable呢,毕竟数据库执行distinct的速度比手动对比速度要快很多

我来回复

您尚未登录,请登录后再回复。点此登录或注册