我有两个ActionItem对象列表:
ListA<ActionItem>;
ListB<ActionItem>;
public class ActionItem
{
#region Public Properties
public string ConnectionId { get; set; }
public int MachineId { get; set; }
public OperationType OperationType { get; set; }
public MachineOperationStatus OperationStatus { get; set; }
public string PackageId { get; set; }
public DateTime StartTime { get; set; }
public TabType TabType { get; set; }
public PageType PageType { get; set; }
#endregion
}
我想加入两个列表ListA和ListB仅在MachineId和PackageId下进行。
IEnumerable<ActionItem> collection = this.ListA .Union(this.ListB);
问题在于ListA可能没有填写所有对象的数据。因此,例如:
ListA will have machineId = 19, packageId = "abc"
其余为默认值。
ListB will have machineId = 19, packageId = "abc", StartTime = "2/3/2012".
所以我想得到以下结果为1行:
machineId = 19,packageId =“abc”,StartTime =“2/3/2012”。
由于ListA缺少信息,因此执行Union操作将返回2行而不是1行。我想让结果从ListB返回信息(因为ListB总是会有更多信息,除非ListB没有该项(machineId,packageId))仅在machineId和packageId上进行缓存。
谢谢
最佳答案
您可以尝试这样的事情:
//Create one list list containing all records
var test = listA.Union(listB);
//Group items based off the MachineId
var lookup = test.ToLookup(t => new {t.MachineId, t.PackageId});
//Final List
var listC = new List<ActionItem>();
foreach (var item in lookup)
{
var newItem = new ActionItem();
newItem.MachineId = item.Key.MachineId;
newItem.PackageId = item.Key.PackageId;
newItem.ConnectionId = item.Max(i => i.ConnectionId);
newItem.OperationStatus = item.Max(i => i.OperationStatus);
newItem.OperationType = item.Max(i => i.OperationType);
newItem.PageType = item.Max(i => i.PageType);
newItem.StartTime = item.Max(i => i.StartTime);
newItem.TabType = item.Max(i => i.TabType);
listC.Add(newItem);
}
listC将具有每个项目的组合信息。
关于linq - LINQ连接/合并两个对象列表,从第二个到第一个优先,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15610885/