我有这个方法用于按月过滤我的博客条目......
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是一个实体框架对象。说实话我有点困惑为什么我要查看blog.DateTime对象的值。即使我把它改为......
var blogsInMonth = from b in blogsOfType
where ((DateTime)b.DateAdded).Month == DateTime.Now.AddMonths(-i).Month
select b;
它仍然无法运作......希望有人可以提供帮助...
答案 0 :(得分:1)
Blog.DateAdded
列很可能在数据库中可为空,并且列中存在空值。
你可以尝试
where b.DateAdded != null && ((DateTime)b.DateAdded).Month == DateTime.Now.AddMonths(-i).Month
答案 1 :(得分:1)
我认为这是因为您的b.DateAdded
为空。尝试更改顶部的行,如下所示:
var blogsOfType = from b in dataContext.blogs
where b.DateAdded != null && b.BlogType == (int)blogTypeArg
select b;
作为优化问题,您可以在Linq表达式之外计算“我回来”。如果有很多博客条目,您将不会执行DateTime.Now.AddMonth(-1)
次多次。