好的,这是问题所在。
我有一张桌子(实际上是一个视图,但它无关紧要)包含一个项目的价格。字段:
此处还有其他字段,也必须可以访问。像列和一些计算数字的东西。这基本上是一个带字段的对象,我们有一个很长的表(数百万行)。
我需要以最新价格加入项目名称列表,我想在linq中这样做。在纯SQL中,这已经不好玩了。我基本上寻找一个“视图”(IQueryable进一步合并)定义,它只包含给定项目名称的最新对象。然后,这允许将JOIN语句与另一个过滤表(要显示价格的项目列表)一起使用。数据库设计是固定的第三方,因此重新设计无法避免这个问题。
在纯SQL中,我将定义一个包含ItemName和Max(Timestamp)(按ItemName分组)的查询,然后使用相同的表自我加入以获取其他字段以获取确切的时间戳。
知道如何在LINQ中做到最好吗? Lambda请,我不喜欢sql风格的语法。
答案 0 :(得分:0)
在Linq-to-objects
我会试试这个:
prices
.GroupBy(p => p.ItemName)
.Select(g => new {
Item = g.Key,
LatestPrice = g.OrderByDescending(p => p.Timestamp).First()
});
虽然我不确定它是否会正确映射到SQL。
答案 1 :(得分:0)
此请求也可以完成这项工作:
var v = from product in Products
join recentProduct in
(from _product in Products
group _product by _product.Name into _products
select new { Name = _products.Key, TimeStamp = _products.Max(s => s.TimeStamp) })
on new { product.Name, product.TimeStamp } equals new { recentProduct.Name, recentProduct.TimeStamp }
select product);