避免数据集中的重复名称

时间:2012-10-26 16:01:46

标签: c# asp.net sql-server

我从表中获取数据并绑定到标签并在网格视图中下拉但我想从表中过滤重复的名称并将相应的日期分配给DDL如何做到这一点?或者还有其他选择吗?

 private DataSet get()
    {
        string sql = "select Id,Name,RunDate from Historytable";
        SqlDataAdapter da=new SqlDataAdapter(sql,con);
        DataSet ds=new DataSet();
        da.Fill(ds);
        return ds;
    }

enter image description here

 protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e)
    { 

        //what to code here?


        }

3 个答案:

答案 0 :(得分:3)

如果您只想从HistoryTable中取回唯一名称,则应使用关键字DISTINCT

string sql = "select DISTINCT Name from Historytable";

然而,看到你的更新,我认为你应该将你的查询更改为类似@dasblinkenlight的建议答案,如果你想要每个名字的第一个日期

string sql = "select Min(ID), Name, Min(RunDate) from Historytable group by Name";

或(如果您想要每个名字的最后日期)

string sql = "select Max(ID), Name, Max(RunDate) from Historytable group by Name";

答案 1 :(得分:1)

删除重复项的快速而肮脏的方法如下:

string sql = "select min(Id),Name,min(RunDate) from Historytable group by Name";

这将消除存在具有数字较小ID的重复Name的所有行。

答案 2 :(得分:0)

如果您不需要任何ID,可以将gridview在其选定事件中的objectdatasource设置为字典,使用一点LINQ进行分组:

Gridview1_ObjectDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e) {
   DataSet ds = get();

   Dictionary<string, List<DateTime>> dict = new Dictionary<string, List<DateTime>>(); 

   var rows = ds.Tables[0].AsEnumerable()
                          .Select(row => new { name = row.Field<string>("name"), RunDate = row.Field<DateTime>("RunDate") })
                          .GroupBy(r => r.name)
   foreach (var group in rows) {
      dict.Add(group.Key, group.ToList());
   }
   e.ReturnValue = dict;
}