使用Linq To Sql查找每个产品的最新价格

时间:2009-07-01 16:14:02

标签: linq-to-sql

如果我有一个包含

的sql表

的ProductID

价格

日期

我希望找到给定日期的最新价格。在Sql中我可以做类似的事情

` 选择* from(

选择ROW_NUMBER()OVER(PARIDTION BY ProductID ORDER BY Date DESC)AS row_number,

产品ID,日期,来自ProductPrices的价格

其中日期< @targetDate

)tempTable

其中row_number = 1 `

是否可以在LinqToSql中轻松完成此操作?我的尝试最终都发布了每个产品的sql命令?

3 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

var query = from product in db.Products
            where product.Date < targetDate
            orderby product.Date descending
            group product by product.ProductID into groups
            select groups.First();

调用First可能无法正常工作,FirstOrDefault可能会 - 其他人发现最近处于类似情况。

编辑:这个解决方案是从标题驱动而不是从SQL(我不完全理解)。它旨在找到每种产品的最新条目。希望这就是你所追求的!

答案 1 :(得分:0)

 var result = (
               from context.table where date < targetDate 
               and ProductID = targetproduct 
               orderby date descending
               select new {ProductID, price, Date}
              ).Take(1);

也许语法不完美但你应该注意Take(1),这相当于row_number

答案 2 :(得分:0)

我认为这可以胜任......

var qry = ProductPrices.Where(pp => pp.Date < targetDate)
                       .Max(pp => pp.Date.Ticks);