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