将数据排序到组合框中

时间:2014-02-08 15:15:28

标签: c# list sorting if-statement foreach

我想循环遍历Person个项目列表。如果一个人在该列表中输入多次,我只想在组合框中显示一次他的名字。我所拥有的代码不止一次显示该人的姓名,因为同一个人并未在列表中直接输入。这是我的代码:

Person equalPerson = new Person();

foreach (Person PersonItem in _listAllData)
{
    if (PersonItem.FirstName != equalPerson.FirstName)
    {
        cboSelectClient.Items.Add(PersonItem);
    }
    equalPerson = PersonItem;
}

请你给我一些关于我能做什么的提示?

6 个答案:

答案 0 :(得分:2)

cboSelectClient.Items.AddRange(
            _listAllData.Select(x=>x.FirstName).Distinct().ToArray());

答案 1 :(得分:1)

只需使用包含功能

即可
if( !cboSelectClient.Items.Contains( PersonItem.FirstName ) )
{
    cboSelectClient.Items.Add( PersonItem.FirstName );
}

答案 2 :(得分:0)

检查人名是否已经在组合框中,不要添加其他名称。 你可以为此目的使用contains方法。 如果(!cboSelectClient.Items.Contains(PersonItem)) //立即添加

答案 3 :(得分:0)

使用LINQ:

List<string> duplicateFirstnames = _listAllData
                .GroupBy(o => o.FirstName, (key, group) => group)
                .Where(group => group.Count() > 1)
                .Select(group => group.FirstOrDefault().FirstName)
                .ToList();

答案 4 :(得分:0)

假设您的Person实体具有Id:

cboSelectClient.Items.AddRange(_listAllData.Select(person => new { person.Id, person.Name}).Distinct().ToArray());

答案 5 :(得分:0)

您可以尝试使用此linq将不同的PersonItem添加到ComboBox。如果出现任何重复的FirstName,则只有第一个项目将添加到ComboBox:

var distinctPerson = (from person in _listAllData
                      group person by person.FirstName into g
                      select g.FirstOrDefault()
                      ).ToArray();
cboSelectClient.Items.AddRange(distinctPerson);