Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# foreach将数据排序到组合框中_C#_List_Sorting_If Statement_Foreach - Fatal编程技术网

C# foreach将数据排序到组合框中

C# foreach将数据排序到组合框中,c#,list,sorting,if-statement,foreach,C#,List,Sorting,If Statement,Foreach,我想循环浏览Person项的列表。如果一个人在列表中输入了多次,我只想在组合框中显示他的名字一次。我使用的代码多次显示此人的姓名,因为同一个人并不是直接在列表中依次输入的。这是我的密码: Person equalPerson = new Person(); foreach (Person PersonItem in _listAllData) { if (PersonItem.FirstName != equalPerson.FirstName) { cboSe

我想循环浏览
Person
项的列表。如果一个人在列表中输入了多次,我只想在组合框中显示他的名字一次。我使用的代码多次显示此人的姓名,因为同一个人并不是直接在列表中依次输入的。这是我的密码:

Person equalPerson = new Person();

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

您能给我一些提示吗?

只需使用包含函数即可

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

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

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

假设您的个人实体具有Id:

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

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

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

这将用所有名称填充组合框,但删除重复的名称,这不是他/她想要的。我想如果组合框出现两次,他/她会想添加到组合框中。@FredrikRedin不,我很确定OP只是想消除重复;只是措辞有点奇怪。
var distinctPerson = (from person in _listAllData
                      group person by person.FirstName into g
                      select g.FirstOrDefault()
                      ).ToArray();
cboSelectClient.Items.AddRange(distinctPerson);