我有一张包含付款记录的表格。这些记录有一个日期时间列,其中包含购买的实际日期时间。现在我想在页面顶部放置一个动态填充的下拉列表,以便用户可以选择一年,然后查看该年度的付款记录。
为了做到这一点,我尝试将这些年份与支付记录区分开来。这就是我所拥有的,但它失败了
List<DateTime> lstYears = new List<DateTime>();
lstYears = context.Payments
.Select(
p => new { p.TimeOfPurchase.GetValueOrDefault().Year }
)
.Distinct()
.ToList()
.Select(x => new DateTime(x.Year, 1, 1))
.ToList();
我收到的错误是&#39; LINQ to Entities无法识别方法GetValueOrDefault&#39;。但是当我删除该方法时,我无法输入&#34; p.TimeOfPurchase.Year &#34;。
是否可以只选择所有这些付款记录的不同年份?
答案 0 :(得分:3)
试试p.TimeOfPurchase.Value.Year
。由于它被翻译为SQL,因此应该处理空值。您可以添加Where
子句来过滤空值。此外,您不需要将它放入匿名类。此外,您可以使用AsEnumerable
将Linq转换为对象而不是ToList
,这样可以避免创建不需要的列表。最后,只需将查询分配给您的变量,并且不要使用刚被丢弃的空列表对其进行初始化。
List<DateTime> lstYears = context.Payments
.Where(p => p.TimeOfPurchase != null)
.Select(p => p.TimeOfPurchase.Value.Year)
.Distinct()
.AsEnumerable()
.Select(x => new DateTime(x, 1, 1))
.ToList();