2009-07-01 50 views
0

產品最新價格,如果我有一個包含查找每使用LinqToSql

的ProductID

價格

日期

SQL表,我想找到最新的價格給定日期。在SQL中我可以從(

選擇ROW_NUMBER()OVER(PARTITION BY的ProductID ORDER BY日期DESC)AS ROW_NUMBER這樣做

` 選擇*,

產品ID,日期,從ProductPrices

價格

其中date < @targetDate

)不是Temptable

where row_number = 1 `

是否可以在LinqToSql中輕鬆實現?我的嘗試都結束了對每個產品的sql命令發佈?

回答

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(我不完全理解)。它旨在爲每個產品找到最新的條目。希望這就是你以後的樣子!

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

也許語法是不完美的,但你要注意,以接管(1),這是相當於ROW_NUMBER

+0

即發現它的單品,雖然,而不是爲每個* *產品的第一個結果。 – 2009-07-01 16:23:11

+0

儘管很可能我誤讀了這個問題...... – 2009-07-01 16:28:02

0

我認爲這將做的工作......

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