我有 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();谁能告诉我这个查询有什么问题。
3 回答
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
您可以检查是否IL包含 PIN,然后IL使用按 PIN 的选择进行过滤。
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();
慕桂英3389331
TA贡献2036条经验 获得超8个赞
你可以使用这样的扩展:
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();
一只斗牛犬
TA贡献1784条经验 获得超2个赞
任何回报,bool
所以你正在使用那个 bool 的 all 函数
如果您只想选择 list2 中包含的 list 1 的值,请.contains
像这样使用:
indInfoTemp = list1.Where(ind => list2.Contains(ind.IL[0].PIN)).ToList();
- 3 回答
- 0 关注
- 151 浏览
添加回答
举报
0/150
提交
取消