为了账号安全,请及时绑定邮箱和手机立即绑定

使用 LINQ 选择 2 个列表之间的匹配结果

使用 LINQ 选择 2 个列表之间的匹配结果

C#
料青山看我应如是 2023-04-29 10:14:03
我有 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();


查看完整回答
反对 回复 2023-04-29
?
慕桂英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();


查看完整回答
反对 回复 2023-04-29
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

任何回报,bool所以你正在使用那个 bool 的 all 函数

如果您只想选择 list2 中包含的 list 1 的值,请.contains像这样使用:

indInfoTemp = list1.Where(ind => list2.Contains(ind.IL[0].PIN)).ToList();


查看完整回答
反对 回复 2023-04-29
  • 3 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信