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

如何用LINQ查询仅关联单个Perimeter的Image?

筛选仅关联唯一Perimeter的Image(LINQ实现)

原始数据

ImagePerimeter
a1
b1
b2
d3
e1

需求说明

需要从上述表中筛选出仅关联唯一Perimeter值的Image,预期结果为 a、d、e(b因关联了1和2两个Perimeter,不符合条件)。

业务目的:删除某个Perimeter时,可移除仅关联该Perimeter的Image;若Image关联多个Perimeter则不能移除。

原SQL查询思路

用户提供的SQL存在语法错误,修正后的核心逻辑SQL如下:

SELECT "Image"
FROM 你的表名
WHERE "Image" IN (
    SELECT "Image"
    FROM 你的表名
    GROUP BY "Image"
    HAVING COUNT(DISTINCT "Perimeter") = 1
)

核心逻辑:先分组统计每个Image关联的Perimeter数量,筛选出数量为1的Image。

LINQ实现方案

1. LINQ to Objects(内存集合操作)

假设数据集合是List<ImagePerimeter>,其中ImagePerimeter类包含Image和Perimeter属性:

var result = imagePerimeterList
    .GroupBy(ip => ip.Image)
    .Where(g => g.Select(ip => ip.Perimeter).Distinct().Count() == 1)
    .Select(g => g.Key)
    .ToList();

若表中无重复的Image+Perimeter记录,可简化为:

var result = imagePerimeterList
    .GroupBy(ip => ip.Image)
    .Where(g => g.Count() == 1)
    .Select(g => g.Key)
    .ToList();

2. LINQ to Entities(Entity Framework场景)

使用EF查询数据库时,写法类似,EF会自动转换为对应SQL:

var result = dbContext.ImagePerimeters
    .GroupBy(ip => ip.Image)
    .Where(g => g.Select(ip => ip.Perimeter).Distinct().Count() == 1)
    .Select(g => g.Key)
    .ToList();

同样,若无重复的Image+Perimeter记录,可简化为:

var result = dbContext.ImagePerimeters
    .GroupBy(ip => ip.Image)
    .Where(g => g.Count() == 1)
    .Select(g => g.Key)
    .ToList();

内容的提问来源于stack exchange,提问作者Lucas Zanon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:15:36