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

如何在C# IEnumerable中筛选BudgetType值非唯一的记录?

在C# EF中获取BudgetType属性重复的记录方案

嘿,你的思路其实已经很对路啦!不过我发现代码里有个小小的拼写失误——BugetType少了一个'd',应该是BudgetType,这个细节可能会导致查询出错哦。

修正后的核心实现

你用分组筛选的思路完全没问题,修正拼写后的代码就能精准实现需求:

// 获取所有BudgetType重复的记录,忽略唯一值的记录
FreelancerProjectsNoduplication = _context.FreelancerProjects
    .GroupBy(f => f.BudgetType) // 按BudgetType字段分组
    .Where(g => g.Count() > 1) // 只保留分组内数量大于1的(即存在重复的分组)
    .SelectMany(g => g) // 将分组展开为单个记录的集合
    .ToList(); // 按需转为List,也可以根据业务需求省略

另一种可选实现:分步子查询

如果你的数据集比较大,分步查询的方式可能性能更优——先找出所有重复的BudgetType值,再匹配对应的记录:

// 第一步:找出所有存在重复的BudgetType值
var duplicateBudgetValues = _context.FreelancerProjects
    .GroupBy(f => f.BudgetType)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key);

// 第二步:查询所有包含这些重复值的记录
var duplicateProjects = _context.FreelancerProjects
    .Where(f => duplicateBudgetValues.Contains(f.BudgetType))
    .ToList();

额外注意点

如果BudgetType是可空类型(比如string?),要是你不想把null值视为重复项,可以在分组前先过滤掉null:

FreelancerProjectsNoduplication = _context.FreelancerProjects
    .Where(f => f.BudgetType != null) // 先排除null值的记录
    .GroupBy(f => f.BudgetType)
    .Where(g => g.Count() > 1)
    .SelectMany(g => g)
    .ToList();

内容的提问来源于stack exchange,提问作者mohammed alani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:08:50