使用 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&lt;T&gt; 类型的某个变量上调用它。 @shwan 请给我留言,这很重要(maythamfahmi@itbackyard.com) 【参考方案1】:

只需通过电子邮件分组并获取每个组中的第一个(删除重复项),最后将其转换为可查询(这里我假设 ListArray,...名称是列表):

var result = list.GroupBy(x => x.email).Select(g => g.First()).AsQueryable();

【讨论】:

非常感谢!它奏效了,它为我节省了太多解决解决方案的工作。

以上是关于使用 Distinct() 过滤 Linq 中的重复记录的主要内容,如果未能解决你的问题,请参考以下文章

如何很好的使用Linq的Distinct方法

linq中分组查询而且获取每个分组中的第一条记录,数据用于分页绑定

(转)LINQ查询操作符之DistinctUnionConcatIntersectExcept

使用DISTINCT时,LINQ to SQL不生成ORDER BY?

为Distinct准备的通用对比器

System.Linq Distinct 方法使用