如何使用LINQ从List<List<Items>>中获取匹配的List<Items>集合
实现方案
场景1:遍历所有db2Data和apiData的匹配对执行业务逻辑
推荐用LINQ的Join方法实现,性能比嵌套循环更高,匹配逻辑清晰:
查询语法写法
// 生成所有匹配的<db2列表, api列表>对 var matchedPairs = from db2ItemList in db2Data join apiItemList in apiData on new { FirstKey = db2ItemList[0].Value, TwentyEighthKey = db2ItemList[27].Value } equals new { FirstKey = apiItemList[0].Value, TwentyEighthKey = apiItemList[27].Value } select new { Db2Items = db2ItemList, ApiItems = apiItemList }; // 遍历匹配结果执行业务逻辑 foreach (var pair in matchedPairs) { // 此处写你的业务逻辑,pair.Db2Items是匹配的db2端列表,pair.ApiItems是匹配的api端列表 }
方法语法写法
var matchedPairs = db2Data.Join( apiData, db2List => new { FirstKey = db2List[0].Value, TwentyEighthKey = db2List[27].Value }, apiList => new { FirstKey = apiList[0].Value, TwentyEighthKey = apiList[27].Value }, (db2List, apiList) => new { Db2Items = db2List, ApiItems = apiList } ); foreach (var pair in matchedPairs) { // 执行业务逻辑 }
场景2:针对单个指定的List<Items>从apiData中筛选匹配项
如果你已经有了要匹配的目标db2列表,直接用Where筛选即可:
// 你的目标db2列表 List<Items> targetDb2Items = 你的目标对象; // 筛选匹配的api列表 var matchedApiItems = apiData .Where(apiList => apiList[0].Value == targetDb2Items[0].Value && apiList[27].Value == targetDb2Items[27].Value) .ToList(); if (matchedApiItems.Any()) { // 存在匹配结果,执行业务逻辑 }
注意事项
- 请确保所有
List<Items>的长度不小于28,否则会触发索引越界异常,如有需要可以在匹配条件中先加list.Count >= 28的判断。 - 如果
Items.Value是引用类型,需要确认该类型已经正确重写了Equals和GetHashCode方法,避免出现仅比较引用地址的异常情况。
内容的提问来源于stack exchange,提问作者Michael Brown
相关产品推荐
相关产品推荐

