2009-07-01 18 views
0

を使用して、製品ごとに最新の価格を見つけます。 SQLでは、私は、ROW_NUMBER AS日付DESC BY商品コードORDER BY(PARTITION)OVER(はLinqToSql

選択ROW_NUMBER()からProductPrices

から

のProductID、日付、価格を

` 選択*のような何かを行うことができます

日付< @targetDate

)TEMPTABLE

ROW_NUMBER = 1 `

はLinqToSqlで簡単にこれを実行することが可能ですどこ?私の試みはすべて、製品ごとにSQLコマンドを発行し終わったのですか?

答えて

1

と等価であるテイク(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ます - 他の誰かがその最近似たような状況で見つかりました。

EDIT:このソリューションは、(私は完全には理解していない)SQLからより多くのタイトルから駆動されました。それは各製品の最新のエントリを見つけることを目指しています。それがあなたの後ろだったことを願っています!私はこれが仕事をするだろうと思う

+0

はい、それは動作します。それは私のLinqの試みに非常に近く、select文だけが異なっていました。私はあなたのソリューションは、一度だけサーバーを打つのに対し、複数のSQLコマンドをトリガするために思われる新しい{groups.Key、詳細= groups.First()} を選択 を使用していました。 だからどうもありがとうございました。 – sgmoore

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

たぶん構文は完璧ではないですが、あなたはどのようにこのような何かについてROW_NUMBER

+0

むしろ*各*製品の最初の結果よりも、かかわらず、単一の製品のためにそれを見つけました。 –

+0

私は質問を間違って読んだことがあります... –

+0

それは私がそれを誤読しているようです... :) –

0

...

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