2012-03-23 176 views
0

使用EF4和LINQLinq GroupBY TakeWhile?

我有一個數據結構,它看起來像這樣:

parentid childid version 
     1   2  1 
     1   3  1 
     1   4  1 
     1   2  2 
     1   3  2 
     1   5  2 
    ... 

也就是說,我要選擇的parentid,childID的但只適用於最高版本,對於每一個parentId的有在數據庫中。

我第一次嘗試是這樣的:

var links = data 
      .GroupBy (link => link.parentid) 
      .Select(ig => ig.OrderByDescending(link => link.version).First()) 
      .Select (link => new .......); 

然而,這顯然只能選擇子ID對每個父ID之一..

在樣本數據上面我想孩子IDS 2,3,5從版本2母1是..

+0

您應該按照parentid進行分組,並按照版本分組。我現在沒有時間去解決問題。如果仍然有必要,我會稍後再試。 – 2012-03-24 22:09:46

回答

0

最後我用這樣的子查詢:

var links = data 
    .OrderBy(link => link.parentid) 
    .ThenBy(link => link.childid) 
    .Where(o => o.version == data 
      .Where(i => i.version == o.version).Max(l => l.version)) 
    .Select(link => new ....); 

這樣,我得到在db所有的parentid與只與孩子們該特定父級的最大版本。

0

這應該滿足你的要求..

var links = data.Where(x => x.version == data.Max(y => y.version)) 
       .OrderBy(x => x.childid) 
       .Select(x => new {parentid = x.parentid, childid = x.childid}); 

,如果你只需要母公司1,則

var links = data.Where(x => x.version == data.Max(y => y.version)) 
       .Where(x => x.parentid == 1) 
       .OrderBy(x => x.childid) 
       .Select(x => new {parentid = x.parentid, childid = x.childid}); 
+0

那甚至沒有有效的代碼。版本是一個標量字段,因此不能用於最大查詢.. – 2012-03-23 13:26:05

+0

是的..但我想你有想法..請檢查更新.. – Flowerking 2012-03-23 13:43:48