使用 Distinct() 过滤 Linq 中的重复记录
Posted
技术标签:
【中文标题】使用 Distinct() 过滤 Linq 中的重复记录【英文标题】:Using Distinct() for filtering duplicated records in Linq 【发布时间】:2019-04-04 21:22:29 【问题描述】:我有一些重复的电子邮件记录。我还需要返回IQueryable
类型。
我尝试了Distinct()
,但我没有为我工作,因为我想返回IQueryable
类型。我收到一个错误,无法将类型系统集合泛型列表隐式转换为 System.Linq.IQueryable
(您是否缺少演员表):
public IQueryable<acadVParent> GetEmailReceiptsId()
return AsQueryable().Where(o => (o.email != null && o.email != ""));
所以这在集合中重复了电子邮件。我想排除具有重复电子邮件记录的对象记录。
【问题讨论】:
您使用的AsQueryable
静态定义在哪里?
你在AsQueryable
之前有什么遗漏吗?
嗨,Shwan,欢迎来到 SO。 AsQueryable
是您创建的某种方法吗?如果有,源头在哪里?否则,我认为您提供的示例代码不会编译。如果您尝试从 Linq 引用 IQueryable
扩展方法,那么应该在 IEnumerable<T>
类型的某个变量上调用它。
@shwan 请给我留言,这很重要(maythamfahmi@itbackyard.com)
【参考方案1】:
只需通过电子邮件分组并获取每个组中的第一个(删除重复项),最后将其转换为可查询(这里我假设 List
或 Array
,...名称是列表):
var result = list.GroupBy(x => x.email).Select(g => g.First()).AsQueryable();
【讨论】:
非常感谢!它奏效了,它为我节省了太多解决解决方案的工作。以上是关于使用 Distinct() 过滤 Linq 中的重复记录的主要内容,如果未能解决你的问题,请参考以下文章
linq中分组查询而且获取每个分组中的第一条记录,数据用于分页绑定
(转)LINQ查询操作符之DistinctUnionConcatIntersectExcept