gpt4 book ai didi

LINQ Join/Union 两个优先于第二个优先于第一个的对象列表

转载 作者:行者123 更新时间:2023-12-02 02:04:50 24 4
gpt4 key购买 nike

我有两个 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
}

我想加入两个仅考虑 MachineId 和 PackageId 的列表 ListA 和 ListB。

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 Join/Union 两个优先于第二个优先于第一个的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15610885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com