将两个通用列表合并在一起

时间:2016-04-08 02:42:42

标签: asp.net-mvc-4

我有一个如下所示的模型。

public class ProcessData
{
    public Int32 ProcessDataId { get; set; }
    public string routenumber { get; set; }
    public string representative { get; set; }
    public string Ischecked { get; set; }
}

我用数据填充了这个

一个。 List<ProcessData> objMainData - 主要数据包括大约40行数据

B中。 List<ProcessData> Manipulated data - 这主要数据有一些修改。我更改了2个字段的数据,比如10行

我想把B和A合并。我希望A拥有我在B中做的修改的完整数据。这可能吗?

假设这是我的数据如下。我怎么把它放在一起?

        public class Collectiondata
            {
                public List<ProcessData> Objmaindata()
                {
                    List<ProcessData> objMain = new List<ProcessData>();
                    objMain.Add(new ProcessData() { ProcessDataId=1,routenumber="2001",representative="James",Ischecked=""});
                    objMain.Add(new ProcessData() { ProcessDataId=2,routenumber="2002",representative="John",Ischecked=""});
                    objMain.Add(new ProcessData() { ProcessDataId=3,routenumber="2003",representative="",Ischecked=""});
                    objMain.Add(new ProcessData() { ProcessDataId=4,routenumber="2004",representative="Bassey",Ischecked=""});
                    objMain.Add(new ProcessData() { ProcessDataId=5,routenumber="2005",representative="Adams",Ischecked="" });
                    return objMain;
                }

                public List<ProcessData> ManipulatedData()
                {
                    List<ProcessData> objMain = new List<ProcessData>();
                    objMain.Add(new ProcessData() { ProcessDataId = 1, routenumber = "3001", representative = "Sumbo", Ischecked = "Y" });
                    objMain.Add(new ProcessData() { ProcessDataId = 2, routenumber = "2002", representative = "Folabi", Ischecked = "Y" });
                    objMain.Add(new ProcessData() { ProcessDataId = 3, routenumber = "3035", representative = "James", Ischecked = "Y" });
                    return objMain;
                }


            }

1 个答案:

答案 0 :(得分:0)

为您的类创建一个实现IEqualityComparer<T>

的比较器
public class ProcessDataComparer : IEqualityComparer<ProcessData>
{
    public bool Equals(ProcessData x, ProcessData y)
    {
        return x.ProcessDataId.Equals(y.ProcessDataId);
    }
    public int GetHashCode(ProcessData obj)
    {
        return obj.ProcessDataId;
    }
}

然后您可以使用linq .Union()合并2个列表

var mergedList = manipulatedData.Union(objMainData, new ProcessDataComparer());

合并列表首先包括来自manipulatedData的项目,然后是来自objMainData的项目,这些项目没有ProcessDataIdmanipulatedData中的项目之一相匹配。请注意,因为它们现在不合规,所以您可能希望在上述查询的末尾添加.OrderBy(x => x.ProcessDataId)子句。