我试图将2列表变量作为参数传递给泛型方法。哪个必须遍历第一列表的所有属性并将值分配给第二列表?
我以我的情况为例:
假设我将“客户”作为我的实体类别,如下所示:
class Customer
{
public int CustId { get; set; }
public string Name { get; set; }
public string custPhoneNumber { get; set; }
}
现在,我有两个类型为customer的列表对象。让第一个列表是来自视图的列表,第二个列表是数据库中的现有列表。
来自用户界面的第一个列表如下所示。
List<Customer> CustomerListToUpdate = new List<Customer>()
{
new Customer { CustId = 1,Name = "XYZ" ,custPhoneNumber = "12345"},
new Customer { CustId = 2,Name = "XYZ" ,custPhoneNumber = "12345"},
new Customer { CustId = 3,Name = "XYZ" ,custPhoneNumber = "12345"}
};
来自数据库的第二个列表如下
List<Customer> extistingCustomerList = new List<Customer>()
{
new Customer { CustId = 1,Name = "abc" ,custPhoneNumber = "56789"},
new Customer { CustId = 2,Name = "abc" ,custPhoneNumber = "56789"},
new Customer { CustId = 3,Name = "abc" ,custPhoneNumber = "56789"}
};
现在,我正在尝试编写一个通用方法,该方法将上面的2个列表作为参数,然后将新值分配给现有列表,并执行我的数据库上下文对象的.SaveChanges()方法。
基本上我无法完成此方法:
class UpdateMethod<T>
{
public void updatemethod<T>(T UpdatedCustomerList, T extistingCustomerList)
{
foreach (var item in UpdatedCustomerList)
{
//I need to assign the values of UpdatedCustomerList to extistingCustomerList
}
}
}
最佳答案
然后,您可以将方法更改为:
public void updatemethod<T>(List<T> UpdatedCustomerList, List<T> extistingCustomerList) where T : class
{
foreach (var item in UpdatedCustomerList)
{
var properties = item.GetType().GetProperties();
var idProp = properties.First(p => p.Name.EndsWith("Id"));
var toUpdate = extistingCustomerList.First(c => (int)idProp.GetValue(c) == (int)idProp.GetValue(item));
foreach (var prop in properties)
{
prop.SetValue(toUpdate, prop.GetValue(item));
}
}
}
如果您使用实体框架,则可以执行以下操作来更新数据库:
class UpdateMethod<T>
{
updatemethod<T>(List<T> UpdatedCustomerList, List<T> extistingCustomerList)
{
var _context = new YourDbContex() // You db context
foreach (var item in UpdatedCustomerList)
{
_context.Entry(item).State = EntityState.Modified;
}
_context.SaveChanges();
}
}
检查此通用存储库中的Entity Framework https://github.com/filipmate/user.crud/blob/master/User.CRUD/Repositories/Repository.cs
关于c# - 谁能帮我完成这种通用方法,从一个列表更新到另一个列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24852263/