如何在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
相关产品推荐
相关产品推荐

