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());