You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

不使用Join实现两表匹配去重取值的LINQ查询编写问题

不使用JOIN的LINQ关联查询实现方案

你可以通过提取表2的Contract ID集合,配合Contains方法完成筛选,无需显式调用join语法,等效于SQL的IN子查询逻辑,和你给出的INNER JOIN输出结果完全一致。两种常用写法如下:

前置说明

注意示例中为了符合C#命名规范,将带空格的字段名转换为了驼峰格式:

  • Contract ID 对应 ContractID
  • Vendor 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:39:04