Linq to sql 使用LinqToSql查找每个产品的最新价格

Linq to sql 使用LinqToSql查找每个产品的最新价格,linq-to-sql,Linq To Sql,如果我有一个包含 产品ID 价格 日期 我想知道某个日期的最新价格。在Sql中,我可以执行以下操作 ` 从中选择*( 选择(按ProductID按日期描述划分)上的行号()作为行号 ProductID、日期、ProductPrices中的价格 其中日期

如果我有一个包含

产品ID

价格

日期

我想知道某个日期的最新价格。在Sql中,我可以执行以下操作

` 从中选择*(

选择(按ProductID按日期描述划分)上的行号()作为行号

ProductID、日期、ProductPrices中的价格

其中日期<@targetDate

)诱人的

其中,行数=1 `

在LinqToSql中是否可以轻松实现这一点?我的所有尝试都以每个产品的sql命令结束?

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

也许语法并不完美,但您应该注意Take(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();
var query=数据库中的产品
其中product.Date
可能先调用
First
不会起作用,但
FirstOrDefault
会起作用-最近有人发现类似情况


编辑:这个解决方案更多地来自于标题而不是SQL(我不完全理解)。它的目的是找到每种产品的最新条目。希望这就是你想要的

我想这可以胜任

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

这是针对单个产品的,而不是针对每个产品的第一个结果。重新阅读后,邮件正文没有明确说明(抱歉),但是的,我正在查找每个产品的最新价格。是的,这很有效。这与我的Linq尝试非常接近,只是select语句有所不同。我使用的是selectnew{groups.Key,details=groups.First()},它似乎会触发多个sql命令,而您的解决方案只对服务器执行一次。非常感谢。