如何在LINQ中找到`Distinct`记录?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在LINQ中找到`Distinct`记录?相关的知识,希望对你有一定的参考价值。

我想在实体框架中找到distinct记录。我的代码如下

var distinctYear = _objCalRepos
    .GetDetails()
    .Select(o => new CalendarList { Mdate = o.Mdate.Year.ToString() })
    .Distinct()
    .ToList();

ddlYear.DataSource = distinctYear;
ddlYear.DataTextField = "Mdate";
ddlYear.DataValueField = "Mdate";
ddlYear.DataBind();

这里区别不起作用。它将返回所有条目(重复)。

答案

区别不起作用,可能是因为CalendarList无法比较。试试这个:

var distinctYear = _objCalRepos
    .GetDetails()
    .Select(o => o.Mdate.Year.ToString())
    .Distinct()
    .AsEnumerable()
    .Select(o => new CalendarList { Mdate = o }))
    .ToList();
另一答案

你可以使用GroupBy

var distinctYear = _objCalRepos
    .GetDetails()
    .Select(o => new CalendarList { Mdate = o.Mdate.Year.ToString() })
    .GroupBy(cl => cl.Mdate )
    .Select(g => g.First())
    .ToList();

以上是关于如何在LINQ中找到`Distinct`记录?的主要内容,如果未能解决你的问题,请参考以下文章

Linq distinct 方法仅适用于特定属性[重复]

仅基于表的一个字段在 Linq 中区分

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

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

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

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