避免数据集中的重复名称
我从表中获取数据并绑定到标签并在网格视图中下拉但我想从表中过滤重复的名称并将相应的日期分配给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; }
protected void GridView1_RowDataBound1(object sender, GridViewRowEventArgs e) { //what to code here? }
如果您只想从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";
删除重复项的快速而肮脏的方法如下:
string sql = "select min(Id),Name,min(RunDate) from Historytable group by Name";
这消除了存在具有数字较小ID的重复Name
所有行。
如果你不需要任何ID,你可以在其选定的事件中将gridview的objectdatasource设置为字典,使用一点LINQ进行分组:
Gridview1_ObjectDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e) { DataSet ds = get(); Dictionary> dict = new Dictionary>(); var rows = ds.Tables[0].AsEnumerable() .Select(row => new { name = row.Field("name"), RunDate = row.Field("RunDate") }) .GroupBy(r => r.name) foreach (var group in rows) { dict.Add(group.Key, group.ToList()); } e.ReturnValue = dict; }