2012-06-14 77 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

相關問題