我有2个列表:
清单1:
[
{
"TPN": "AL M",
"IL": [
{
"PIN": 1502103214,
"Suffix": null
}
]
},
{
"TPN": "ABC",
"IL": [
{
"PIN": 6509507561,
"Suffix": null
},
{
"PIN": 1234056789,
"Suffix": null
}
]
},
{
"TPN": "XYZ",
"IL": [
{
"PIN": 7507668878,
"Suffix": null
}
]
}
]
清单2:
List<decimal> list2 = new List<decimal>(){ 6509507561, 7507668878 }
我想根据列表2的值过滤列表1。 所以我的最终名单应该是
[
{
"TPN": "ABC",
"IL": [
{
"PIN": 6509507561,
"Suffix": null
}
]
},
{
"TPN": "XYZ",
"IL": [
{
"PIN": 7507668878,
"Suffix": null
}
]
}
]
我正在使用的LINQ查询是:
var indInfoTemp = list1.Where(ind => ind.IL.All(x => list2.Any(y => y == x.PIN)))
.ToList();
任何人都可以告诉我此查询出了什么问题。
谢谢, 塞吉什
答案 0 :(得分:1)
任何人都返回bool
,因此您在该bool上使用all函数
如果您只想选择列表2中包含的列表1的值,请使用.contains
,如下所示:
indInfoTemp = list1.Where(ind => list2.Contains(ind.IL[0].PIN)).ToList();
答案 1 :(得分:1)
您可以检查IL
是否包含PIN,然后使用PIN选择来过滤IL
。
var indInfoTemp = list1.Where(ind => ind.IL.Any(il => list2.Contains(il.PIN)))
.Select(ind => new {
ind.TPN,
IL = ind.IL.Where(il => list2.Contains(il.PIN))
.ToList()
})
.ToList();
答案 2 :(得分:1)
您可以使用以下扩展名:
public static class Extensions
{
public static bool In<T>(T input, params T[] list) => list.Any(item => item.Equals(input));
}
并像这样使用它:
var indInfoTemp = list1.Where(ind => ind.IL.PIN.In(list2.ToArray())).ToList();