Linq声明明显不适用于日期

Jam*_*mie 1 c# linq

我一直在遍历stackoverflow.com和Interwebz,了解如何使用Linq Distinct(),但我对我的情况没有任何好运.

我要做的是显示日期列表(2015年8月,2015年7月等),每个日期只显示一次.

会发生什么事情是因为您可以在一个月内多次发布新的博客帖子,因此这些月份会重复.我认为使用Distinct会有所帮助,但似乎它没有做任何事情.当我尝试添加时GroupBy(),我OrderByDescending停止工作,而且我没有经验丰富,只需将其变成一个IList,我在其他几个例子中看到过.

BlogRepeater.DataSource = _PostRepository.GetAll(ConfigurationManager.GetSiteID())
    .Where(x => x.DatePublished != null && x.DatePublished >= DateTime.Now.AddYears(-1))
    .Distinct().OrderByDescending(x => x.DatePublished)
    .Select(x => x.DatePublished.Value.Date);
Run Code Online (Sandbox Code Playgroud)

这样做的最佳方式是什么?

我试过从其他例子中取出碎片,但无济于事.提前致谢.

在此输入图像描述

更新:感谢您的帮助!这是工作代码,希望它可以在将来帮助其他人.

代码背后:

BlogRepeater.DataSource = 
            _PostRepository
            .GetAll(ConfigurationManager.GetSiteID())
            .Where(x => x.DatePublished != null && x.DatePublished >= DateTime.Now.AddYears(-1) && x.Status == "Published")
            .Select(x => x.DatePublished.Value.ToString("MMM yyyy"))
            .Distinct()
            .OrderBy(x => x);
        BlogRepeater.DataBind();
Run Code Online (Sandbox Code Playgroud)

前端:

<a href="/Blog/Archive/<%#(Container.DataItem)%>"><%#(Container.DataItem)%></a>
Run Code Online (Sandbox Code Playgroud)

Cri*_*scu 6

如果您的DatePublished字段包含具有不同时间的DateTime值,.Distinct()则不会按预期运行,因为这些值本质上是不同的.

如果你想要不同的日期,而不是日期/时间,那么你可以在以下.Select之前移动最后一个.Distinct():

BlogRepeater.DataSource = 
  _PostRepository
    .GetAll(ConfigurationManager.GetSiteID())
    .Where(x => x.DatePublished != null && x.DatePublished >= DateTime.Now.AddYears(-1))
    .Select(x => x.DatePublished.Value.Date)   
    .Distinct()
    .OrderByDescending(x => x);
Run Code Online (Sandbox Code Playgroud)

如果你想找到不同的月份,而不是日期,那么你必须改变

.Select(x => x.DatePublished.Value.Date)
Run Code Online (Sandbox Code Playgroud)

.Select(x => x.DatePublished.Value.ToString("MMM yyyy"))
Run Code Online (Sandbox Code Playgroud)

您可以随意将"MMM yyyy"格式更改为您认为合适的其他内容.