按照另一个表中项目的最高计数对一个表结果进行排序

时间:2012-04-25 10:59:57

标签: c# asp.net-mvc linq-to-sql

我有桌面产品,我存储我的产品和另一个表投票,这些投票结合了用户对该产品的投票。

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);

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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 产品ID IpAdress DateTimeCreated

答案 2 :(得分: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);