条件合并,同时合并两个List的副本

时间:2018-04-27 22:33:55

标签: c# list

我有两个清单,

adm = Admin(name='test',url='/db')

我尝试编写一个接受detailId并通过合并上面两个列表返回结果的方法,如果有重复(重复定义=当detailId,两个列表之间有详细匹配时)从L2中选择条目

所以合并后的结果将是

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"}
};

请注意,结果我们从L2中选择了此条目,因为detailId = 5,detailcd = ABC重复

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"},
};

2 个答案:

答案 0 :(得分:2)

如果您确实想要使用detailId过滤结果,因为此值会传递给GetDealResponse()方法,您可以向均衡.Where添加Union条件} list。

public class DealResponse
{
    public string detailId { get; set; }
    public string detailcd { get; set; }
    public string fileName { get; set; }
    public string isNgo { get; set; }
}

public List<DealResponse> GetDealResponse(string detailId)
{
    return L2.Union(L1, new DealResponseComprarer())
             .Where(elm => elm.detailId.Equals(detailId)).ToList();
}


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" }};

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" }};

string ID = "5";
List<DealResponse> L3 = GetDealResponse(ID);

将返回此列表:

{ detailId = "5", detailcd = "ABC" , fileName = "string 11", isNgo = "1" }
{ detailId = "5", detailcd = "DEF" , fileName = "string 2", isNgo = "0" }
{ detailId = "5", detailcd = "XYZ" , fileName = "string ", isNgo = "0" }

答案 1 :(得分:1)

  

我尝试编写一个接受detailId并通过合并上面两个列表返回结果的方法,如果有重复(重复定义=当detailId,两个列表之间有详细匹配时)从L2中选择条目

另一种说法是:

  1. 从L2开始
  2. 添加L1中已有的所有内容
  3. 这可以用一行完成:

    var combined = L2.Concat(L1.Except(L2, new DealResponseComprarer()));
    

    Example on DotNetFiddle