许多类似的问题,但我找不到一个简单的解决方案。我想将以下查询的结果插入到存档表中。
var record = (from a in db.contacts
where a.id == 1
select a).FirstOrDefault();
如果表格只有几列,那么添加它就不会有问题
contacts_archive ca = new contacts_archive()
{
ca.id = record.id,
ca.name = record.name,
.....
};
db.contacts_archive.Add(ca)
但是,如果我的桌子有一百列呢?是否有更好(更快)的方式?
答案 0 :(得分:1)
如果属性名称完全匹配,您可以使用AutoMapper或Mapster等自动映射器为您执行此操作。否则,如果您不想解决添加nuget包的问题,可以自己使用反射并循环浏览属性。
contacts_archive ca = new contacts_archive();
var archiveProps = ca.GetType().GetProperties();
foreach (var prop in record.GetType().GetProperties()) {
if (!archiveProps.Any(a => a.Name == prop.Name)) {
continue;
}
prop.SetValue(ca, prop.GetValue(record));
}
这假设您的名字和属性类型完全匹配。
答案 1 :(得分:1)
尝试使用ValueInjector或AutoMapper帮助您将源对象中的类似字段映射到目标对象,然后将生成的目标对象插入到数据库中。以下是有关如何使用这些数据的一些示例。 ValueInector和AutoMapper