我使用Store Procedure获取结果,然后我有一个填充结果的Datatable。从那里结果填入ListBox。我正在获取重复的ID,我想删除重复的结果。
private DataTable _dt = new DataTable();
ListBox1.DataSource = _dt;
ListBox1.DataValueField = "userId"; //column name in DT
ListBox1.DataBind();
答案 0 :(得分:2)
如果你使用linq,你可以使用:
var source = _dt.Distinct();
ListBox1.DataSource = source;
ListBox1.DataValueField = "userId";
ListBox1.DataBind();
修改强>
好吧,在更仔细地研究中,我发现System.Data.DataRowCollection
没有像典型的IEnumerable一样实现IEnumerable扩展方法,例如List
。要使用Distinct()
扩展方法,首先需要将行设置为更基本的IEnumerable。
IEnumerable<System.Data.DataRow> rows = (IEnumerable<System.Data.DataRow>)_dt.Rows;
ListBox1.DataSource = rows.Distinct();
ListBox1.DataValueField = "userId";
ListBox1.DataBind();
虽然它有效但它可能不像@Massimiliano提供的答案那么简单或有效。
答案 1 :(得分:2)
DataTable distinctTable = originalTable.DefaultView.ToTable( /*distinct*/ true);
ListBox1.DataSource = distinctTable ;
ListBox1.DataValueField = "userId";
ListBox1.DataBind();
答案 2 :(得分:1)
我认为乔尔的答案对你的情况有用。但是,我可能会尝试通过在存储过程中使用DISTINCT
来避免首先返回重复项。这样,如果您或其他人再次需要相同的数据,他们不必在任何地方过滤掉重复数据。此外,您还可以获得不在数据库和Web服务器之间通过网络发送不必要数据的第二个好处。