不使用Join实现两表匹配去重取值的LINQ查询编写问题
不使用JOIN的LINQ关联查询实现方案
你可以通过提取表2的Contract ID集合,配合Contains方法完成筛选,无需显式调用join语法,等效于SQL的IN子查询逻辑,和你给出的INNER JOIN输出结果完全一致。两种常用写法如下:
前置说明
注意示例中为了符合C#命名规范,将带空格的字段名转换为了驼峰格式:
Contract ID对应ContractIDVendor Name对应VendorName
你可以根据实际项目中的实体类属性名自行调整。
方法语法写法
// 第一步:提取表2中所有不重复的Contract ID集合 var contractIdCollection = table2.Select(s2 => s2.ContractID).Distinct().ToList(); // 第二步:筛选表1数据,返回指定字段并去重 var queryResult = table1 .Where(s1 => contractIdCollection.Contains(s1.ContractID)) .Select(s1 => new { s1.ContractID, s1.VendorName }) .Distinct() .ToList();
查询语法写法
// 第一步:提取表2中所有不重复的Contract ID集合 var contractIdCollection = table2.Select(s2 => s2.ContractID).Distinct().ToList(); // 第二步:筛选表1数据,返回指定字段并去重 var queryResult = ( from s1 in table1 where contractIdCollection.Contains(s1.ContractID) select new { s1.ContractID, s1.VendorName } ).Distinct().ToList();
性能优化提示
提前对表2的Contract ID做去重处理,可以减少后续匹配环节的冗余计算,提升查询效率。
内容的提问来源于stack exchange,提问作者Priya
相关产品推荐
相关产品推荐

