gpt4 book ai didi

c# - 为什么使用此 Linq to Sql 方法会出现 InvalidOperationException?

转载 作者:行者123 更新时间:2023-12-03 19:41:56 25 4
gpt4 key购买 nike

当执行以下 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,而不是可为 null 的 int。

我可以轻松地编写一个存储过程来解决这个问题,但我认为这是让我更多地了解 linq to sql 的好方法。

请帮忙!

最佳答案

有一个 Connect thread about this这表明您将 Sum() 的结果转换为可为 null 的类型(在您的情况下为 int?)。我怀疑如果您希望评分不可为空,则可以使用空合并运算符:

Rating = ((int?) (from v in l.SqlLinkVotes
where v.Tag == tagId
&& v.VoteDate >=
select v.Vote).Sum()) ?? 0

无论如何都值得一试。

关于c# - 为什么使用此 Linq to Sql 方法会出现 InvalidOperationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/776269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com