更新IList< T>从另一个列表< >

本文关键字:列表 另一个 IList 更新 | 更新日期: 2023-09-27 18:18:37

我有两个list

类型为IList<CustomClassOne>

的用户

IList<CustomClassTwo>型触点。

两个类都有唯一的ID。我需要填充CustomClassOne的属性"Description"使用CustomClassTwo的属性"Info"。

foreach (CustomClassOne user in users )
{
    if (!string.IsNullOrEmpty(user.Description))
    {
        long id = user.ID;
        string desc = user.Description;
        var temp =  contacts.Select(p => p.ID = id);
        ...
        ...
    }
    else
        continue;
}

更新IList< T>从另一个列表< >

听起来你需要使用Join:

foreach (var pair in users.Join(contacts, u => u.ID, c => c.ID, Tuple.Create))
{
    pair.Item1.Description = pair.Item2.Info;
}

或者如果您喜欢查询语法:

var pairs = 
    from user in users 
    join contact in contacts on user.ID equals contact.ID
    select new { user, contact };
foreach (var pair in pairs)
{
    pair.user.Description = pair.contact.Info;
}

您可以使用Join将这两种类型匹配在一起,之后您可以迭代匹配并应用更改。

var query = from contact in contacts
    join user in users
    on contact.Id equals user.Id
    into users
    select new 
    {
        contact,
        users,
    }
foreach(var match in query)
    foreach(var user in match.users)
    {
        user.Description = match.contact.Info;
    }

您可以在foreach循环中进行搜索,如果找到,则将其分配给CustomClassOne实例:

foreach (CustomClassOne item in users)
{
     var temp = contacts.Find(c => c.ID == item.ID);
     item.Description = temp == null ? item.Description : temp.Info;
}