与Linq(对实体)的不同年月

Fau*_*ust 6 c# linq entity-framework

我有一个具有ReleaseDate属性的实体Publications集.我希望从这个集合中获取所有不同年份和月份组合的列表,以创建分页小部件.

最好,我想要一个DateTime值列表,每天从我的出版物集中的每个月开始为1:

IEnumerable<DateTime> DistinctYearMonths = from p in context.Publications.  .... ?
Run Code Online (Sandbox Code Playgroud)

如何完成此linq-to-entities查询?

Sla*_*uma 14

IEnumerable<DateTime> DistinctYearMonths = context.Publications
    .Select(p => new { p.ReleaseDate.Year, p.ReleaseDate.Month })
    .Distinct()
    .ToList() // excutes query
    .Select(x => new DateTime(x.Year, x.Month, 1)); // copy anonymous objects
                                                    // into DateTime in memory
Run Code Online (Sandbox Code Playgroud)

投影到匿名类型的中间步骤是必要的,因为您不能直接投影到DateTime(LINQ to Entities中的投影中不支持具有参数的构造函数,Year而且readonly的Month属性DateTime是,所以您不能使用初始化语法设置它们(new DateTime { Year = p.ReleaseDate.Year, ... }不可能)).