0

製品を保存するテーブル Products と、その製品に対するユーザーの投票を保存する別のテーブル Votes があります。

Product:
ID
Name
Price
etc..

Votes:
ID
ProductID
IpAdress
DateTimeCreated

linq to sql で過去 24 時間に最も投票された製品を取得するにはどうすればよいですか? 私は自分でそれを理解するのにL2Sが得意ではありません。

これは私がこれまでに得た最も近いものです。このスニペットは最後の 10 票を獲得する必要がありますが、過去 24 時間でトップの票を獲得する必要があります。

 var last10Voted = (from vote in context.Votes join product in 
 context.Products on vote.ProductID equals
 product.ID orderby vote.DateTimeCreated select product).Take(10);
4

3 に答える 3

2
var last10Voted =
  ( 
    from product in context.Products
    let votes = context.Votes
                       .Where(v=>v.ProductID == product.ID 
                                && v.DateTimeCreated >= DateTime.Now.AddHours(-24))
    orderby votes.Count() descending
    select product
 ).Take(10);
于 2012-04-25T11:05:07.263 に答える
1
var topVotedProducts = 
    Votes.Where(v => v.DateTimeCreated > DateTime.Now.AddHours(-24))
        .GroupBy(v => v.ProductID)
        .Join(Products, g => g.Key, p => p.ID, (g,p) => new { cnt = g.Count(), prod = p.Name })
        .OrderByDescending(result => result.cnt);

商品名:ID名・価格等

投票: ID ProductID IpAdress DateTimeCreated

于 2012-04-25T11:07:52.823 に答える
0
var mostVoted =
    from product in context.Products
    let votes = context.Votes.Count(vote => vote.ProductID == product.ID && (DateTime.Now - vote.DateTimeCreated).TotalHours <= 24)
    orderby votes descending
    select product;

var top10 = mostVoted.Take(10);
于 2012-04-25T11:08:58.507 に答える