![](/img/trans.png)
[英]C# How do I copy from one data grid to another without overwriting my previous selection?
[英]How do I copy one list to another that has an object with additional properties in C# ? (without a foreach)
我需要将一个对象列表复制到另一个列表中,但是,第二个列表具有其他属性(基本上,第一个列表是第二个列表的子集)。 下面是一个如何处理 class 产品和另一个 class ProductExt 的 foreach 循环的示例,该产品继承自产品并向其添加另一个属性。 -- 这是我需要做的一个简略版本 --
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 中执行此操作,但不确定如何使用 go 来解决它):
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 (使用默认值)中做到这一点?
尝试这个:
List<ProductExt> productExts = products.select(product=> new ProductExt()
{
Name = product.Name,
// another properties
}).Tolist();
如果您不为任何属性赋值,则将默认值设置为该属性。 (示例:对于 int 属性 => 0)
您始终可以将AutoMapper用于这些类型的工作。 这样做的好处是,如果您稍后添加新属性,则无需记住映射新属性。
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<Product, ProductExt>();
});
var mapper = config.CreateMapper();
List<ProductExt> productExts = products.Select(p => mapper.Map(p, new ProductExt())).ToList();
好的,看起来 Mapster 是这里的赢家 - 它非常快速和简单。
List<ProductExt> productExts = new List<ProductExt>();
products.Adapt(productExts);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.