我想循环遍历Person
个项目列表。如果一个人在该列表中输入多次,我只想在组合框中显示一次他的名字。我所拥有的代码不止一次显示该人的姓名,因为同一个人并未在列表中直接输入。这是我的代码:
Person equalPerson = new Person();
foreach (Person PersonItem in _listAllData)
{
if (PersonItem.FirstName != equalPerson.FirstName)
{
cboSelectClient.Items.Add(PersonItem);
}
equalPerson = PersonItem;
}
请你给我一些关于我能做什么的提示?
答案 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);