SQL文を次のようにLINQ実行するとき:なぜこの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()
};
を私は(ヌル値がのInt32に割り当てることができない)のSystem.InvalidOperationExceptionを取得します。
これは、動的オブジェクトのRatingプロパティから得たものです。
特定のリンクのSqlLinkVotesがない場合、Sum()はnull値になりますが、Ratingはintで、linqとsqlはSum()がnullを返すintではないと判断します。
私はこの問題を回避するためにストアドプロシージャを簡単に書くことができましたが、私はlinqをもっとSQLに理解するのに良い方法だと思いました。
助けてください!
Aha!あなたは私にそれを打つ!私はちょうど同じことを投稿した。 –
この回答はうまくいきます - 数週間前にこれに噛まれて、この修正が見つかりました。 –
人は少しでも問題ありません。 –