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