从另一个IList <t> </t> </t>更新IList <t>

时间:2014-08-19 15:34:28

标签: c# generics collections ilist

我有两个IList。

IList<CustomClassOne>

类型的用户

IList<CustomClassTwo>类型的联系人。

这两个类都有唯一的ID。我需要填写CustomClassOne的属性&#34;描述&#34;使用CustomClassTwo的属性&#34; Info&#34;。

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;

}

3 个答案:

答案 0 :(得分:1)

听起来你需要使用Join

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

或者如果您更喜欢query syntax

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

答案 1 :(得分:0)

您可以使用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;
    }

答案 2 :(得分:0)

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

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