2010-08-17 69 views
0

這個問題是類似這樣的:從一個表和最新的1行獲取行從關聯的表,在LINQ

LINQ to SQL: GroupBy() and Max() to get the object with latest date

但我有我要回了很多行的表從。它的主鍵被用作第二個表中的外鍵。對於從第一行返回的每一行,我也想要返回(在同一結果集中)最新的(在這種情況下,由日期時間字段排序)1行。

這將如何在LINQ中使用C#構造?

我的最好的是:

var instances = from i in ContextDB.Instances 
        join p in ContextDB.Points on i.InstanceID equals p.InstanceID 
        where categoryIDs.Contains(j.CategoryID) 
        group p by p.InstanceID into latestPoint 
        select new latestPoint.OrderBy(i => i.Instance.Title).FirstOrDefault(); 

但是,這顯然是錯誤的。雖然我認爲我正確理解group,但我不認爲我正確理解into

[編輯]爲了避免混淆,我認爲這個問題可以概括爲:「如何從一張表格中的行以及另一張表格中的最新的1行?」

+0

你需要清除你的編輯..我認爲有一個錯字。 – Nix 2010-08-17 13:02:58

+1

有更好的方法來做到這一點,它將開始於實體模型中的關聯/關係。您的模型中的Instances/CategoryInstances/Points是否存在關聯? – Nix 2010-08-17 13:04:03

+0

是的,CategoryInstances - > InstanceID(在兩者中),Instances - > InstanceID上的實例(在兩者中)。模式中有表引用。我將從樣本中刪除涉及CategoryInstances的行,因爲這會導致混淆。 – 2010-08-17 13:10:30

回答

1

如何:

var instances = from i in ContextDB.Instances 
       where i.CategoryInstances.Any(categoryIDs.Contains(ci => ci.CategoryID)) 
       select new 
       { 
        Instance = i, 
        LatestPoint = i.Points.OrderBy(i => i.Instance.Title).FirstOrDefault() 
       }; 

注意,我可以using associations instead of join免去很多冗餘的。

+0

有時候我會提出建議,要知道他們應該以更好的方式來做......但這是假設實例和點之間有聯繫的有效方法。 – Nix 2010-08-17 13:07:02

相關問題