不要将重复项绑定到复选框
本文关键字:绑定 复选框 | 更新日期: 2023-09-27 18:14:30
我有一个对象列表,其中包含销售人员的团队详细信息。列表中有几个团队的名字相同,但销售人员不同。
teamDetails类有以下属性:
string teamName;
string region;
int teamSales;
string salesmanFullName;
string salesmanAddress;
用户可以选择查找销售额超过某一特定值的所有球队。然后将这些团队添加到复选框列表中。
我是这样填充复选框列表的:
var viewList = from toSearch in GlobalVariables.allSalesmenList
where toSearch.teamSales > Convert.ToInt32(txtSalesSearch.Text)
select toSearch;
SearchCheckedListBox.DataSource = viewList.ToList();
SearchCheckedListBox.DisplayMember = "teamName";
我遇到的问题是,如果团队有多个销售人员,则团队名称显示不止一次。
我如何防止复选框有重复的值?
尝试在比较器中使用distinct:
var viewList = from toSearch in GlobalVariables.allSalesmenList
where toSearch.teamSales > Convert.ToInt32(txtSalesSearch.Text)
select toSearch;
SearchCheckedListBox.DataSource = viewList.Distinct(new TeamComparer()).ToList();
SearchCheckedListBox.DisplayMember = "teamName";
比较器代码:
public class TeamComparer : IEqualityComparer<teamDetails>
{
public bool Equals(teamDetails x, teamDetails y)
{
if (x.teamName == y.teamName) return true;
return false;
}
public int GetHashCode(teamDetails obj)
{
if (Object.ReferenceEquals(obj, null)) return 0;
return obj.teamName.GetHashCode();
}
}
你可以直接使用
SearchCheckedListBox.DataSource = viewList.GroupBy(x => x.teamName)
.Select(g => g.First())
.ToList();
如果您打算多次使用相同的技巧,您可以编写一个扩展方法
public static IEnumerable<T> DistinctBy<T, S>(this IEnumerable<T> list, Func<T, S> selector)
{
return list.GroupBy(selector).Select(g => g.First());
}
那么代码就是
SearchCheckedListBox.DataSource = viewList.DistinctBy(x => x.teamName).ToList();