2014-09-10 58 views
1

假設我有List<CustomObject> list跳過所有項目後第一個相同的編號

CustomObject具有一個結構:

public class CustomObject 
{ 
    public int coId{get;set;} 
    public List<SubCustObj> subList{get;set;} 
    public DateTime datePublish{get;set;} 
} 
public class SubCustObj 
{ 
    public int Id{get;set;} 
    public Region rRegion{get;set;} 
} 
// Region : for you it's only important to know that it has regionId 

如果在列表中存在CustomObject的具有相同coIdRegion我需要離開僅1最近datePublish元素。換句話說,一個coId - 一個Region。我該怎麼做?

//list it's List<CustomObject> 
    var toDelete = ist.SelectMany(r => 
             r.subList.Where(m => r.subList.Count() > 2) 
             .Select(rm => rm.rRegion.regionID)); 

此代碼選擇重複區域的ID,但接下來我不知道什麼TODO。


一些新的想法:我可以通過regionId對元素進行分組,然後只選擇該組中的第一個元素?

+0

你似乎很瞭解linq,試着把它放在Distinct()中,看起來它可能會在你選擇的結尾處出現。 – DidIReallyWriteThat 2014-09-10 15:56:08

+0

@CalvinSmith,但這只是選擇獨特的區域,而它可以更多的1區域刪除相同的ID – demo 2014-09-10 16:00:01

回答

0

您可以通過datePublish按區域選擇對(Region, CustomObject),訂單,組,各組接的第一項:

var res = list 
    .SelectMany(c => c.subList.Select(s => new {Custom = c, Region = s.rRegion})) 
    .OrderByDescending(p => p.Custom.datePublish) 
    .GroupBy(p => p.regionId) 
    .Select(g => g.First()); 

這讓你對CustomObjectRegion這樣的區域不重複(CustomObject但是可以重複)。

+0

謝謝,這是有道理的。請給我一些時間來測試它。如果沒關係,我會接受你的回答,在其他情況下我會告訴你是否有問題。再次感謝 – demo 2014-09-10 16:20:50

+0

是的,我認爲它可行,但我還需要添加'Distinct()'以獲得唯一的'CustomObject' – demo 2014-09-11 09:50:16

相關問題