如果我有一个包含
的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命令?
答案 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);