微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过同一ID将一个列表中的属性添加到另一个列表中

如何解决通过同一ID将一个列表中的属性添加到另一个列表中

有没有办法使此代码更简洁,当列表具有相同的ID时,我试图将一个列表的属性复制到另一列表。

感谢您的帮助。

/*Parameters*/
List < Model1 > List1,<Model2 > List2

List < Model1 > newList = new List < Model1 > ();

foreach(Model1 list1 in List1) {
  foreach(Model2 list2 in List2) {
    if (list1.ID == list2.ID) {
      list1.Attribute = list2.Attribute;
    }
  }
  newList.Add(list1);
}
return newList;

解决方法

您的代码有什么问题?如果它已经被某种方法包装了,我看不到您所拥有的问题。我会发表评论而不是回答,但是您需要的代表比我需要的更多。

如果您认为适合的话,可以将其设置为extension

//Put this in a static class
public static List<Model1> CopyAttributes(this List<Model1> list1,List<Model2> list2) {
    List<Model1> newlist = new List<Model1>();
    foreach(Model1 item1 in list1) {
        foreach(Model2 item2 in list2) {
            if(item1.ID == item2.ID) {
                item1.Attribute = item2.Attribute;
            }
        }
        newlist.Add(item1);
    }
    return newlist;
}

编辑:这是您所要求的使用lambda的LINQ解决方案;这段代码不是最佳实践,但是您似乎要这样做。它也不会小很多,纯粹是因为您想要的东西是您的情况所独有的,并且不能被广泛推广。

List<Model1> newlist = new List<Model1>();
list1.ForEach(item1 => {
    list2.ForEach(item2 => {
        if(item1.ID == item2.ID) item1.Attribute = item2.Attribute;
    });
    newlist.Add(item1);
});
,

如果您只是想将属性复制到list1的相同项目中

public static void CopyAttributesOfMatchingItems(List<Model1> list1,List<Model2> list2)
{
        foreach (var item in list1)
        {
            var matchingItem = list2.SingleOrDefault(i2 => i2.Id == item.Id);
            if (matchingItem != null)
                item.Attribute = matchingItem.Attribute;
// if Attribute is reference type,and you want an actual copy you will need to clone... item.Attribute = matchingItem.Attribute.Clone();
        }
}

如果您需要将具有匹配ID的项目添加到新列表中(因为您已经在注释中提到要使用Lambda表达式)。

public static List<Model1> CopyItemsToNewList(List<Model1> list1,List<Model2> list2)
{
        List<Model1> newList = new List<Model1>();
        newList.AddRange(list1.Where(i1 => list2.Any(i2 => i2.Id == i1.Id) ));
        return newList;
}

注意:从这个问题尚不清楚,是要将同一个对象添加到新列表中,还是要将对象的实际副本添加到新列表中。对于前者,您会很好用;对于后者,您将需要使用一种方法来克隆该对象并将克隆添加到列表中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。