我使用存储过程来获取结果,然后我有一个数据表来填充结果。从那里将结果填充到 ListBox 中。我收到重复的 ID,我想删除重复的结果。
private DataTable _dt = new DataTable();
ListBox1.DataSource = _dt;
ListBox1.DataValueField = "userId"; //column name in DT
ListBox1.DataBind();
如果你使用 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 提供的答案那么简单或高效。
DataTable distinctTable = originalTable.DefaultView.ToTable( /*distinct*/ true);
ListBox1.DataSource = distinctTable ;
ListBox1.DataValueField = "userId";
ListBox1.DataBind();
我认为乔尔的回答适用于您的情况。但是,我可能会首先尝试通过DISTINCT
在存储过程中使用来避免返回重复项。这样,如果您或其他人再次需要相同的数据,他们就不必到处过滤重复数据。此外,您还可以获得第二个好处,即不在数据库和 Web 服务器之间通过网络发送不必要的数据。