foreach 循环检查对象 ID 是否已经存在

foreach loop to check if the object ids already exists

在 C# 中,我有一个 foreach 循环。

foreach (businfo ibusinfo in lclbbusinfo)
{
    ibusinfo.Updateperson();
}

lclbbusinfo -> 包含列 member_id 和其他相关列

updateperson() -> 方法将更新 member_id(主键)信息,如姓名,phone 等

大多数情况下 lclbusinfo 会有不同的 member_id 所以它会在每个循环中相应地更新成员的信息。

在极少数情况下,有时 lclbbusinfo 会具有相同的 member_id。在这种情况下,第一次迭代将更新成员 table,然后下一次(或第 3 次或第 4 次等)也将尝试在相同的 table.[= 中再次更新相同的成员信息。 12=]

那么我们如何避免一次又一次地更新同一个会员id呢?

我试过使用 ibusinfo 来检查以前的 member_id。

如果您只想更新具有相同 member_id 对象的第一个 businfo 对象,您可以使用如下方式:

foreach (businfo ibusinfo in lclbbusinfo.GroupBy(x => x.member_id)
                                        .Select(g => g.First()).ToList())
{
    ibusinfo.Updateperson();
}

这会将 lclbbusinfo 中具有相同 member_id 且只有 select 第一个被 foreach 循环使用的元素分组。

GroupBy() 超过 collection 就足够了。但是如果您正在寻找多种方法来实现重复检查,您可以在遍历 collection.

的同时单独维护一个 HashSet<int>
HashSet<int> unique = new HashSet<int>();

foreach( var item in lclbbusinfo )
{
    if(unique.Add(item.member_id))
    {
        item.Updateperson();
    }
}

更新示例以考虑评论。

试试这个。 添加命名空间 => 使用 System.linq;

        List<member_id_dataType> member_idList = lclbbusinfo.Select(x => 
        x.member_id).Distinct().ToList();
        foreach (var ibusinfo in lclbbusinfo)
        {
            if (member_idList.Contains(ibusinfo.member_id))
            {
                ibusinfo.Updateperson();
                member_idList.Remove(ibusinfo.member_id);
            }
        }