Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq语句在日期上不起作用_C#_Linq - Fatal编程技术网

C# Linq语句在日期上不起作用

C# Linq语句在日期上不起作用,c#,linq,C#,Linq,我一直在stackoverflow.com和Interwebz上寻找如何将Linq与Distinct()一起使用,但我的情况并不好 我想做的是显示一个日期列表(2015年8月、2015年7月等),每个日期只显示一次 发生的情况是,月份重复,因为您可以在一个月内发布一次以上的新博客文章。我原以为使用Distinct会有所帮助,但它似乎什么都没做。当我尝试添加GroupBy()时,我的OrderByDescending停止工作,我没有足够的经验将其转换为IList,我在其他几个示例中看到了这一点 B

我一直在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);
最好的方法是什么

我试着从其他例子中摘取一些片段,但没有用。提前谢谢

更新:谢谢你的帮助!下面是工作代码,希望它能在将来帮助其他人

代码隐藏:

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发布一些数据,显然您想要的是月份列表,而不是日期列表。请参阅我答案的最新更新。