1

私は 2 つのテーブルを持ってpictureおりpictureratings、データベース内にあります。

public partial class picture
{
    public int idpicture { get; set; }
    public int iduser { get; set; }
    public string picTitle { get; set; }
    public string picFilename { get; set; }
    public System.DateTime pictime { get; set; }
    public int nuditylevel { get; set; }
    public int fakeslevel { get; set; }

    // This property will hold the total accumulated/summed 
    // up rating of a picture
    public int totalrating { get; set; }    
}

public partial class pictureratings 
{
    public int idrating { get; set; }
    public int idpictures { get; set; }
    public int iduser { get; set; }
    public System.DateTime iddatetime { get; set; }
    public int iduserrateddby { get; set; }
    public int rating { get; set; } 
}

評価ごとに新しいpictureratings行が作成されます。pictureratings写真IDでテーブルをグループ化し、いいねを数えたいと思います。それらのいいねをプロパティのpictureテーブルに表示したい。totalrating

したがって、私のように、次のコードを書くことができます

 var combo = from p in db.picturedetails
                    join l in db.picturelikes on p.idpictures equals l.idpictures into pl
                    select new LikesandPictureDetails
                    {
                             IdUserPic = p.iduser,
                           IdPicturess =p.idpictures,
                           Likes = p.likes,
                           NudityLevel = p.nuditylevel,
                           PicTitle = p.picTitle,
                           PicTime = p.pictime,
                           picFilename=p.picFilename,
                           Count=pl.Count(),
                           totalrating = pl.Average(c => c.likenumber) // This line is causing error
                    };

クエリの合計を返すために Web API を使用しています。、、、、などのpictureプロパティを表示 しています。iduserpicTitlepicFilenamepictimenuditylevelfakeslevel

今のところ、すべてがスムーズに実行されますが、 totalrating = pl.Average(c => c.likenumber) を追加すると、例外が発生します

具体化された値が null であるため、値型 'Double' へのキャストが失敗しました。結果の型のジェネリック パラメーターまたはクエリのいずれかで、null 許容型を使用する必要があります。

エラーを取り除く方法は?

4

3 に答える 3

4

おそらく問題は、plにレコードがないことです。試してみてください

交換

totalrating = pl.Average(c => c.likenumber) // This line is causing error

totalrating = pl.DefaulIfEmpty(0).Average(c => c.likenumber) 
于 2013-09-26T00:57:03.817 に答える
2

db.picturelikes.likenumber は null 可能のようですか? ただし、コードで定義されたプロパティが見つかりません。とにかく、入力することでnullではないすべてのエントリを選択できます

pl.Where(a=>a.likenumber != DBNull.Value /* or null whatever this is... */).Average...

null 許容プロパティの場合:

pl.Where(a=>a.likenumber.HasValue).Average(a=>a.likenumber.Value)

:edit この場合、 .average は null 許容の 10 進数を返すと思います。それをフィールドに割り当てるには、単に

totalrating = pl.Average(c => c.likenumber) 

Totalrating は int のようです。int にキャストして情報を失うか、タイプを double に変更します...

于 2013-09-25T16:12:09.153 に答える