-1

我有一个包含销售人员团队详细信息的对象列表。该列表有几个名称相同但销售人员不同的团队。

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";

我遇到的问题是,如果团队有多个推销员,则团队名称会多次显示。

如何防止复选框具有重复值?

4

2 回答 2

1

尝试使用 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();
        }
    }
于 2013-05-19T12:26:52.403 回答
1

你可以简单地使用这个

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();
于 2013-05-19T12:32:30.047 回答