0

私には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 total = from p in db.picturedetails
            join l in db.picturelikes on p.idpictures equals l.idpictures 
            group l by l.idpictures into g
            select new 
            {
                IdUserPic = g.First().iduser,
                IdPictures = g.First().idpictures,
                totalrating = g.Count()    
            }

クエリの合計を返すために Web API を使用しています。だからここに私の問題があります: 、、、、、のようなpictureプロパティを表示する方法? 私はそれを正しくやっていますか?どうすればいいですか?iduserpicTitlepicFilenamepictimenuditylevelfakeslevel

4

2 に答える 2

1

グループ参加があなたが探しているものだと思います:

var total = from p in db.picturedetails
            join l in db.picturelikes on p.idpicture equals l.idpictures into pl
            select new
            {
                Picture = p,
                AverageRating = pl.Any()
                                    ? pl.Average(l => l.rating)
                                    : (double?)null,
                RatingsCount = pl.Count(),
                TotalRating = pl.Sum(l => (float?)l.likenumber) ?? 0
            };

写真に「いいね!」がない場合、これによりその写真の0合計とnull平均が得られます。

于 2013-09-25T14:21:39.153 に答える
1

匿名クラスをグループ化できます。そうすれば、p と l の両方のプロパティにアクセスできます。
次のようになります。

var total = from p in db.picturedetails
            join l in db.picturelikes on p.idpictures equals l.idpictures 
            group new {p,l} by l.idpictures into g
            select new 
            {
                IdUserPic = g.First().p.iduser,
                IdPictures = g.First().p.nuditylevel,
                totalrating = g.Count()    
            }
于 2013-09-25T14:24:15.050 に答える