【发布时间】:2018-10-08 19:28:56
【问题描述】:
我有两个列表,
private List<DealResponse> L1 = new List<DealResponse>
{
new DealResponse {detailId = "5", detailcd = "ABC", fileName = "string 1", isNgo = "0"},
new DealResponse {detailId = "5", detailcd = "DEF", fileName = "string 2", isNgo = "0"},
new DealResponse {detailId = "5", detailcd = "XYZ", fileName = "string ", isNgo = "0"}
};
private List<DealResponse> L2 = new List<DealResponse>
{
new DealResponse {detailId = "5", detailcd = "ABC", fileName = "string 11", isNgo = "1"},
new DealResponse {detailId = "6", detailcd = "MNO", fileName = "string 3", isNgo = "1"}
};
我正在尝试编写一个接受detailId并通过合并以上两个列表返回结果的方法,如果有重复(重复定义=两个列表之间的detailId,detailcd匹配时)从L2中选择条目
所以合并后的结果就是
var Result = new List<DealResponse>
{
new DealResponse {detailId = "5", detailcd = "ABC", fileName = "string 11", isNgo = "1"},
new DealResponse {detailId = "5", detailcd = "DEF", fileName = "string 2", isNgo = "0"},
new DealResponse {detailId = "5", detailcd = "XYZ", fileName = "string ", isNgo = "0"},
new DealResponse {detailId = "6", detailcd = "MNO", fileName = "string 3", isNgo = "1"},
};
请注意,由于 detailId = 5,detailcd = ABC 是重复的,因此我们从 L2 中选择了这个条目
public List<DealResponse> GetDealResponse(string detailId)
{
// My main confusion is while doing union how to handle the case
// which I mentioned (On duplicate select entry from second list)
var L3 = L1.Union(L2, new DealResponseComprarer()).ToList();
}
public class DealResponse
{
public string detailId { get; set; }
public string detailcd { get; set; }
public string fileName { get; set; }
public string isNgo { get; set; }
}
public class DealResponseComprarer : IEqualityComparer<DealResponse>
{
public bool Equals(DealResponse x, DealResponse y)
{
return x.detailId == y.detailId && x.detailcd == y.detailcd ;
}
public int GetHashCode(DealResponse obj)
{
return (obj.detailId.GetHashCode() + obj.detailcd.GetHashCode());
}
}
【问题讨论】:
-
试试
var L3 = L2.Union(L1, new DealResponseComprarer()).ToList(); -
@Matt.G 在这种情况下,如何确保当有重复项时我从 L2 中选择一个条目。如果您在有重复结果时查看结果应该包括来自 L2 的条目
-
我听不懂你的
GetDealResponse(int detailId)。detailId如何在这里发挥作用?结果列表不应包含具有detailId = 6的元素,而应仅包含具有detailId = 5的Distinct 元素(例如),具有L2 优先级。 -
当您的方法将
int用于detailId时,这会让人感到困惑,但它在DealResponse类中被声明为string。 -
@RufusL 抱歉,这是我的错误,已更正。谢谢