用lambda表达式查找请求数据和响应数据的并集



我正在发送这样的请求数据

{
"1": "a",
"2": "b",
"3": "c",
"4": "d",
"5": "e",
"array": [
{
"GroupID": "NUMBER",
"CodeID": "ONE",
"Value": "1"
},
{
"GroupID": "NUMBER",
"CodeID": "TWO",
"Value": "1"
},
{
"GroupID": "NUMBER",
"CodeID": "THREE",
"Value": "1"
},
{
"GroupID": "NUMBER",
"CodeID": "FOUR",
"Value": "1"
}
]
}

通过API接收响应数据,如下所示

{
"Code": "00",
"Msg": "SUCCESS",
"Data": [
{
"a": "1",
"b": "2",
"c": "3",
"d": "4",
"e": "5",
"f": "6",
"g": "7",
"h": "8",
"array": [
{
"GroupID": "NUMBER",
"CodeID": "ONE",
"Value": "1"
},
{
"GroupID": "NUMBER",
"CodeID": "TWO",
"Value": "1"
},
{
"GroupID": "NUMBER",
"CodeID": "THREE",
"Value": "1"
},
{
"GroupID": "NUMBER",
"CodeID": "FOUR",
"Value": "1"
},
{
"GroupID": "NUMBER",
"CodeID": "FIVE",
"Value": "0"
},
{
"GroupID": "NUMBER",
"CodeID": "SIX",
"Value": "0"
}
]
},
{
"a": "9",
"b": "10",
"c": "11",
"d": "12",
"e": "13",
"f": "14",
"g": "15",
"h": "16",
"agreements": [
{
"GroupID": "NUMBER",
"CodeID": "ONE",
"Value": "1"
},
{
"GroupID": "NUMBER",
"CodeID": "TWO",
"Value": "1"
},
{
"GroupID": "NUMBER",
"CodeID": "THREE",
"Value": "1"
},
{
"GroupID": "NUMBER",
"CodeID": "FOUR",
"Value": "0"
},
{
"GroupID": "NUMBER",
"CodeID": "FIVE",
"Value": "0"
},
{
"GroupID": "NUMBER",
"CodeID": "SIX",
"Value": "0"
}
]
}
]
}

我写了这样一段代码,比较数据和数据,并只选择与请求数据匹配的数据。

我将所有的响应数据放在列表中,并编写如下代码

List<user_model> list= new List<user_model>();
List<user_model> list2= new List<user_model>();
foreach (user_model um in list)
{
if (um.array[0].Value == param["7"].ToString() &&
um.array[1].Value == param["8"].ToString() &&
um.array[2].Value == param["9"].ToString() &&
um.array[3].Value == param["10"].ToString())
{
list2.Add(bm);
}
}

是否有一种方法来编码我的代码更简洁,通过lambda表达式?

假设bm是一个错别字,你可以这样做

list2.AddRange( 
list.Where( um =>
um.array[0].Value == param["7"].ToString() &&
um.array[1].Value == param["8"].ToString() &&
um.array[2].Value == param["9"].ToString() &&
um.array[3].Value == param["10"].ToString() 
) 
);

如果你的值是数组而不是字符串,那么你需要做一个数组比较,你怎么做这取决于你,例如

um.array[0].Except(param["7"]).Count() > 0
um.array[0].SequenceEquals( param["7"] )

,在某些情况下,将比较逻辑拉到单独的比较器类中是有意义的。会有现有的答案详细说明