为什么我的Linq查询抛出一个异常,当我尝试和排序的日期时间
本文关键字:时间 日期 排序 异常 一个 查询 Linq 我的 为什么 | 更新日期: 2023-09-27 18:16:53
我有一个按月过滤博客条目的方法…
public IList<KeyValuePair<string, int>> GetBlogsByMonth(PteDotNetCore.EnumsAndConstants.BlogType blogTypeArg)
{
var blogsOfType = from b in dataContext.blogs
where b.BlogType == (int)blogTypeArg
select b;
IList<KeyValuePair<string, int>> retVal = new List<KeyValuePair<string, int>>();
for(int i= 12; i > 1; i--)
{
var blogsInMonth = from b in blogsOfType
where ((DateTime)b.DateAdded).Month == DateTime.Now.AddMonths(-i).Month
select b;
KeyValuePair<string, int> keyToAdd = new KeyValuePair<string, int>(DateTime.Now.AddMonths(-i).Month.ToString(), blogsInMonth.ToList().Count);
retVal.Add(keyToAdd);
}
return retVal;
}
当我使用调试器blogsInMonth我得到一个错误
base {System.SystemException} = {"Nullable object must have a value."}
Blog是一个实体框架对象。老实说,我有点困惑,为什么我必须看在博客的价值。DateTime对象。即使我把它改成…
var blogsInMonth = from b in blogsOfType
where ((DateTime)b.DateAdded).Month == DateTime.Now.AddMonths(-i).Month
select b;
它仍然不工作…
很可能Blog.DateAdded
列在数据库中是可空的,并且列中存在空值。
你可以试试
where b.DateAdded != null && ((DateTime)b.DateAdded).Month == DateTime.Now.AddMonths(-i).Month
我认为这是因为你的b.DateAdded
是空的。尝试更改顶部的行,如下所示:
var blogsOfType = from b in dataContext.blogs
where b.DateAdded != null && b.BlogType == (int)blogTypeArg
select b;
作为优化问题,您可以在Linq表达式之外计算"i moths back"。如果有很多博客条目,你不会做DateTime.Now.AddMonth(-1)
超过必要的次数。