Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 合并两个通用列表_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 4 合并两个通用列表

Asp.net mvc 4 合并两个通用列表,asp.net-mvc-4,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; } } 我用数据填充了这个 A.列出objMainData-这有大约

我有一个下面这样的模型

public class ProcessData
{
    public Int32 ProcessDataId { get; set; }
    public string routenumber { get; set; }
    public string representative { get; set; }
    public string Ischecked { get; set; }
}
我用数据填充了这个

A.
列出objMainData
-这有大约40行的主数据

B.
列出操作数据
-这有一些修改后的主数据。我更改了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;
                }


            }
公共类收集数据
{
公共列表Objmaindata()
{
List objMain=新列表();
Add(newprocessdata(){ProcessDataId=1,routenumber=“2001”,representative=“James”,Ischecked=”“});
Add(newprocessdata(){ProcessDataId=2,routenumber=“2002”,representative=“John”,Ischecked=”“});
Add(new ProcessData(){ProcessDataId=3,routenumber=“2003”,representative=“”,Ischecked=“”});
Add(newprocessdata(){ProcessDataId=4,routenumber=“2004”,representative=“Bassey”,Ischecked=”“});
Add(newprocessdata(){ProcessDataId=5,routenumber=“2005”,representative=“Adams”,Ischecked=”“});
返回objMain;
}
公共列表数据()
{
List objMain=新列表();
Add(newprocessdata(){ProcessDataId=1,routenumber=“3001”,representative=“Sumbo”,Ischecked=“Y”});
Add(newprocessdata(){ProcessDataId=2,routenumber=“2002”,representative=“Folabi”,Ischecked=“Y”});
Add(newprocessdata(){ProcessDataId=3,routenumber=“3035”,representative=“James”,Ischecked=“Y”});
返回objMain;
}
}

为实现
IEqualityComparer的类创建比较器


合并列表将首先包括来自操纵数据的项目,然后是来自
objMainData
的项目,这些项目没有与
操纵数据中的一个项目匹配的
ProcessDataId
。请注意,由于它们现在不按顺序排列,您可能需要在上述查询的末尾添加一个
.OrderBy(x=>x.ProcessDataId)
子句。

ProcessDataId
唯一标识符,类是否有比较器?是的ProcessDataId是唯一标识符。它没有比较器您可以通过创建比较器(
IEqualityComparer
)并使用linq
.Union()
子句来完成此操作。请给我一点时间测试代码,我将添加一个答案。谢谢您,先生。我很感激。我一直在努力让这个工作很长时间了谢谢。我刚刚添加了一个测试数据。现在我该如何把这些放在一起。以前从未使用过这个。你不明白什么部分?我如何将它与我的数据联系起来?对不起,我不明白你的意思。您有2个
列表
集合-您只需要使用
.Union()
子句。我要玩它。
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;
    }
}
var mergedList = manipulatedData.Union(objMainData, new ProcessDataComparer());