首页 > 解决方案 > 如何将一个列表复制到另一个具有 C# 中具有附加属性的对象的列表?(没有foreach)

问题描述

我需要将一个对象列表复制到另一个列表中,但是,第二个列表具有其他属性(基本上,第一个列表是第二个列表的子集)。下面是一个示例,说明如何为类 Product 和另一个类 ProductExt 执行 foreach 循环,该类继承自 product 并向其添加另一个属性。-- 这是我需要做的一个简略版本 --

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }

    //note there are 78 more product properties!
}

public class ProductExt : Product
{
    public int FirstVariantId { get; set; }
}

以及如何使用 foreach 完成的示例(但我想在 Linq 中执行此操作,但不确定如何执行):

        List<Product> products = new List<Product>();
        products.Add(new Product { Id = 1, Name = "widget a" });
        products.Add(new Product { Id = 2, Name = "widget b" });
        products.Add(new Product { Id = 3, Name = "widget c" });
        products.Add(new Product { Id = 4, Name = "widget d" });
        products.Add(new Product { Id = 5, Name = "widget e" });
        products.Add(new Product { Id = 6, Name = "widget f" });
        products.Add(new Product { Id = 7, Name = "widget g" });

        List<ProductExt> productExts = new List<ProductExt>();
        
        // want to  copy products into productExts list with a default value of 0 for FirstVariantId
       foreach(var p in products)
        {
            var px = new ProductExt();
            px.Id = p.Id;
            px.Name = p.Name;
            px.FirstVariantId = 0;
            productExts.Add(px);
        }

有没有办法在 Linq 中做到这一点(使用默认值)?

标签: c#linqcollections

解决方案


尝试这个 :

List<ProductExt> productExts = products.select(product=> new ProductExt()
    {
        Name = product.Name,    
        // another properties
    }).Tolist();

如果您不为任何属性赋值,则将默认值设置为该属性。(示例:对于 int 属性 => 0)


推荐阅读