C# Linq语句在日期上不起作用
我一直在stackoverflow.com和Interwebz上寻找如何将Linq与C# Linq语句在日期上不起作用,c#,linq,C#,Linq,我一直在stackoverflow.com和Interwebz上寻找如何将Linq与Distinct()一起使用,但我的情况并不好 我想做的是显示一个日期列表(2015年8月、2015年7月等),每个日期只显示一次 发生的情况是,月份重复,因为您可以在一个月内发布一次以上的新博客文章。我原以为使用Distinct会有所帮助,但它似乎什么都没做。当我尝试添加GroupBy()时,我的OrderByDescending停止工作,我没有足够的经验将其转换为IList,我在其他几个示例中看到了这一点 B
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);
最好的方法是什么
我试着从其他例子中摘取一些片段,但没有用。提前谢谢
更新:谢谢你的帮助!下面是工作代码,希望它能在将来帮助其他人
代码隐藏:
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();
前端:
<a href="/Blog/Archive/<%#(Container.DataItem)%>"><%#(Container.DataItem)%></a>
如果
DatePublished
字段包含不同时间的日期时间值,则.Distinct()
将不会按您所期望的方式运行,因为这些值本质上是不同的
如果您想要不同的日期,而不是日期/时间,则可以移动最后一个。选择.distinct()之前的:
如果您想找到不同的月份,而不是日期,那么您必须更改
.Select(x => x.DatePublished.Value.Date)
排队
.Select(x => x.DatePublished.Value.ToString("MMM yyyy"))
请随意将“MMM yyyy”
格式更改为您认为合适的任何其他格式。如果您的DatePublished
字段包含具有不同时间的日期时间值,则.Distinct()
将不会按照您期望的方式运行,因为这些值本质上是不同的
如果您想要不同的日期,而不是日期/时间,则可以移动最后一个。选择.distinct()之前的:
如果您想找到不同的月份,而不是日期,那么您必须更改
.Select(x => x.DatePublished.Value.Date)
排队
.Select(x => x.DatePublished.Value.ToString("MMM yyyy"))
请随意将“MMM yyyy”
格式更改为您认为合适的任何其他格式。似乎很简单,但当我这样做时,代码会忘记DatePublished是什么System.DateTime不包含“DatePublished”的定义,并且找不到接受类型为“System.DateTime”的第一个参数的扩展方法“DatePublished”。它只允许我使用OrderByDescending作为查询的第一部分。@jlg是的,对不起,我忘了相应地更新OrderByDescending
子句。请参阅我答案的更新。感谢您澄清!查询能够运行,但Distinct()
仍不工作。检查我添加到帖子中的图像。@jlg.Select(x=>x.DatePublished.Value.Date)
应该会处理这个问题。如果仍然不起作用,请尝试从您的\u PostRepository
@jlg OK发布一些数据,显然您想要的是月份列表,而不是日期列表。查看我答案的最新更新。看起来很简单,但当我这么做时,代码忘记了DatePublished是什么System.DateTime不包含“DatePublished”的定义,并且找不到接受类型为“System.DateTime”的第一个参数的扩展方法“DatePublished”。它只允许我使用OrderByDescending作为查询的第一部分。@jlg是的,对不起,我忘了相应地更新OrderByDescending
子句。请参阅我答案的更新。感谢您澄清!查询能够运行,但Distinct()
仍不工作。检查我添加到帖子中的图像。@jlg.Select(x=>x.DatePublished.Value.Date)
应该会处理这个问题。如果仍然不起作用,请尝试从您的\u PostRepository
@jlg OK发布一些数据,显然您想要的是月份列表,而不是日期列表。请参阅我答案的最新更新。