0

我使用存储过程来获取结果,然后我有一个数据表来填充结果。从那里将结果填充到 ListBox 中。我收到重复的 ID,我想删除重复的结果。

private DataTable _dt = new DataTable();

ListBox1.DataSource = _dt;
ListBox1.DataValueField = "userId"; //column name in DT
ListBox1.DataBind();
4

3 回答 3

2

如果你使用 linq,你可以使用:

var source = _dt.Distinct();

ListBox1.DataSource = source;
ListBox1.DataValueField = "userId";
ListBox1.DataBind();

编辑: 好的,在更仔细的研究中,我发现System.Data.DataRowCollectionIEnumerable 扩展方法的实现方式与典型的 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 提供的答案那么简单或高效。

于 2012-05-23T16:20:35.507 回答
2
DataTable distinctTable = originalTable.DefaultView.ToTable( /*distinct*/ true);
ListBox1.DataSource = distinctTable ;
ListBox1.DataValueField = "userId";
ListBox1.DataBind();

http://msdn.microsoft.com/en-us/library/wec2b2e6.aspx

于 2012-05-23T16:26:00.723 回答
1

我认为乔尔的回答适用于您的情况。但是,我可能会首先尝试通过DISTINCT在存储过程中使用来避免返回重复项。这样,如果您或其他人再次需要相同的数据,他们就不必到处过滤重复数据。此外,您还可以获得第二个好处,即不在数据库和 Web 服务器之间通过网络发送不必要的数据。

于 2012-05-23T16:27:20.123 回答