C# 从datetime列到不同年份的Linq
我有一张包含付款记录的表格。这些记录有一个datetime列,其中包含购买的实际日期时间。现在我想在页面顶部放置一个动态填充的下拉列表,以便用户可以选择一年,然后查看该年的付款记录 为了做到这一点,我试图区分付款记录中的年份。这就是我所拥有的,但它失败了C# 从datetime列到不同年份的Linq,c#,sql-server,linq,C#,Sql Server,Linq,我有一张包含付款记录的表格。这些记录有一个datetime列,其中包含购买的实际日期时间。现在我想在页面顶部放置一个动态填充的下拉列表,以便用户可以选择一年,然后查看该年的付款记录 为了做到这一点,我试图区分付款记录中的年份。这就是我所拥有的,但它失败了 List<DateTime> lstYears = new List<DateTime>(); lstYears = context.Payments .Select(
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();
List lstreats=新列表();
lstYears=上下文。付款
.选择(
p=>new{p.TimeOfPurchase.GetValueOrDefault().Year}
)
.Distinct()
托利斯先生()
.选择(x=>newdatetime(x.Year,1,1))
.ToList();
我收到的错误是“LINQ to Entities无法识别方法GetValuerDefault”。但当我删除该方法时,我无法键入“p.TimeOfPurchase.Year”
是否可以只选择所有这些付款记录的不同年份?尝试
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();
List lstYears=context.Payments
.Where(p=>p.TimeOfPurchase!=null)
.Select(p=>p.TimeOfPurchase.Value.Year)
.Distinct()
.可计算的()
.选择(x=>newdatetime(x,1,1))
.ToList();
试试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();
List lstYears=context.Payments
.Where(p=>p.TimeOfPurchase!=null)
.Select(p=>p.TimeOfPurchase.Value.Year)
.Distinct()
.可计算的()
.选择(x=>newdatetime(x,1,1))
.ToList();
试试p.TimeOfPurchase.Value.Year
。因为它被转换为SQL,所以空值应该被处理。@juharr这个简单的更改很好地解决了这个问题,非常感谢p.TimeOfPurchase.Value.Year。因为它被转换为SQL,所以空值应该被处理。@juharr这个简单的更改完美地完成了这个任务,非常感谢