【发布时间】:2009-04-22 08:55:43
【问题描述】:
当执行以下 linq to sql 语句时:
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,而不是一个可为空的 int。
我可以很容易地编写一个存储过程来解决这个问题,但我认为这对我来说是更好地了解 linq to sql 的好方法。
请帮忙!
【问题讨论】:
标签: c# sql linq linq-to-sql