我有一组具有ReleaseDate属性的Publications。为了创建分页小部件,我希望从这个集合中获取所有不同的year& -month组合的列表。
最好是,我想要一个DateTime值列表,每天从我的出版物集开始为1:
IEnumerable<DateTime> DistinctYearMonths = from p in context.Publications. .... ?
如何完成此linq-to-entities查询?
答案 0 :(得分:13)
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
投影到匿名类型的中间步骤是必要的,因为您无法直接投影到DateTime
(LINQ to Entities和Year
和{{1}中的投影不支持具有参数的构造函数Month
的属性是只读的,因此您无法使用初始化语法设置它们(DateTime
是不可能的))。
答案 1 :(得分:2)
尝试以下查询:
(from p in publications
select new DateTime(p.ReleaseDate.Year, p.ReleaseDate.Month, 1)).Distinct();
答案 2 :(得分:1)
使用分组依据:
(from i in context.Publications
group i by new { i.ReleaseDate.Year, i.ReleaseDate.Month } into g
select g.Key).ToList().Select(i => new DateTime(i.Year, i.Month, 1));
答案 3 :(得分:0)
var DistinctYearMonths = (from p in context.Publications
select new DateTime(p.ReleaseDate.Year,
p.ReleaseDate.Month,
1)).Distinct();
答案 4 :(得分:0)
var DistinctYearMonths = context.Publications
.Select(x => new DateTime(x.ReleaseDate.Year, x.ReleaseDate.Month, 1))
.Distinct()
.ToList()
我喜欢链式linq方法比长形式更好。他们更容易阅读IMO。