如何使用LINQ方法或查询语句从TabA表中获取满足(col2,col3)匹配L2int列表元素的col1值
用LINQ筛选TabA中符合条件的col1值
我来帮你搞定这个需求,这里有两种实用的LINQ实现方式,都能得到你要的List<int>结果:
方法1:Join操作(性能优先)
如果你的L2int列表元素比较多,推荐用Join——它会先构建哈希表做快速匹配,比遍历检查的效率高不少。
假设L2int是值元组列表(就像你给的示例((1,2),(2,3))),代码如下:
// 示例L2int定义 var L2int = new List<(int c1, int c2)> { (1, 2), (2, 3) }; // 执行筛选 var result = TabA .Join( L2int, tabRow => new { tabRow.col3, tabRow.col2 }, // TabA的匹配键:col3对应L2int的c1,col2对应c2 listItem => new { listItem.c1, listItem.c2 }, // L2int的匹配键 (tabRow, _) => tabRow.col1 // 提取需要的col1值 ) .ToList();
如果L2int是自定义类(比如有C1和C2属性),只要把listItem.c1换成listItem.C1、listItem.c2换成listItem.C2就行。
方法2:Any()方法(代码更直观)
要是L2int元素不多,用Any()的写法会更直白,一眼就能看懂逻辑:
var L2int = new List<(int c1, int c2)> { (1, 2), (2, 3) }; var result = TabA .Where(tabRow => L2int.Any(item => item.c1 == tabRow.col3 && item.c2 == tabRow.col2)) .Select(tabRow => tabRow.col1) .ToList();
核心逻辑说明
简单说就是:我们要找TabA里那些行,它的col3等于L2int某个元素的c1,同时col2等于该元素的c2——也就是(col2, col3)这个组合,对应存在于L2int的(c2, c1)组合里。
内容的提问来源于stack exchange,提问作者jippy13011
相关产品推荐
相关产品推荐

