我试图将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/

10-17 02:10