2012-06-14 85 views
1

我有一个相当长的linq查询和一切工作,因为它应该..但在最后一次加入我做一个innerjoin上表有一个日志,该日志返回超过50条记录,我只是想在最新的记录..从当前返回每个有日期时间记录的大型linq查询获取“最新”日期时间

这里是那么的会发生什么的简单说明,每个产品存储在一个例子

var tst = from w in context.storage 
      join p in context.products on w.id equals p.wid 
      join l in context.logger on p.id equals l.pid 
      select new 
      { 
       storageid = w.id, 
       productid = p.id 
       productname = p.name 
       bought = l.when 
      }; 

一个存储中心,当该产品被购买时有一个日志,如果它被购买了100次,那么记录器中有100条记录。

所以目前它为productid = 5 ...返回50条记录...为什么..因为它被买了50次,但我只想要1条记录,因此我只想要记录器的最新日期时间。

任何人都可以帮忙吗?我有点卡住了。

+1

这是LINQ to SQL或实体框架? –

+0

是否有一个字段在数据库中存储日期时间当记录提交 –

回答

4

使用result.Distinct(x => x.Prop)获得独特的条目只有

使用result.Max(x => x.Prop)以获得最新的日期,Min()得到最早的。

1

这是要限制对记录的集合在其上加入,您可以通过编码手动加入(那种)做的一个案例:

from w in context.storage 
join p in context.products on w.id equals p.wid 
// "manual" join: 
from l in context.logger.Where(l => l.pid == p.id).OrderByDescencing(l => l.when).Take(1) 
select new 
{ 
    storageid = w.id, 
    productid = p.id 
    productname = p.name 
    bought = l.when 
}; 

用流利的LINQ的语法,这是一个SelectMany with a result selector

相关问题