当执行下面的LINQ to SQL语句:为什么我用这个Linq to Sql方法得到InvalidOperationException?
var stuff = from l in _db.SqlLinks
select new
{
Link = l,
Rating = (from v in l.SqlLinkVotes
where v.Tag == tagId
&& v.VoteDate >= since
select v.Vote).Sum(),
NumberOfVotes = (from v in l.SqlLinkVotes
where v.Tag == tagId
&& v.VoteDate >= since
select v.Vote).Count(),
NumberOfComments = (from v in l.SqlLinkVotes
where v.Tag == tagId
&& v.VoteDate >= since
&& v.Comment != ""
select v.Vote).Count()
};
我得到一个System.InvalidOperationException(空值不能被分配到的Int32)。
通过调试我已经看到这是来自动态对象的Rating属性。
如果特定链接没有SqlLinkVotes,则Sum()结果为空值,但Rating是int,而linq to sql认为Sum()将导致int,而不是可为null的int。
我可以很容易地写一个存储过程来解决这个问题,但我认为这是一个很好的方式,让我更好地理解linq到sql。
请帮忙!
啊哈!你击败了我!我刚刚发布了同样的东西。 – 2009-04-22 09:05:23
这个答案有效 - 几个星期前被这个问题咬了,发现了这个问题。 – 2009-04-22 09:07:38