2014-01-30 83 views
3

是否有更優雅和/或更快的書寫方式?Linq .ForEach Optimization

foreach(var listing in listings) 
{ 
    listing.Reviews.ForEach(r => r.ListingID = listing.ListingID); 
    listing.OpenHours.ForEach(o => o.ListingID = listing.ListingID); 
    listing.Photos.ForEach(r => r.ListingID = listing.ListingID); 
    listing.Types.ForEach(t => t.ListingID = listing.ListingID); 
} 

所有它做的是要通過所有的子集,並在每個子集

+0

是的,[Parallel.ForEach](http://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel.foreach(v = vs.110).aspx)或[Parallel Linq ](http://msdn.microsoft.com/en-us/library/dd997425(v = vs.110)的.aspx)。 – Noseratio

+1

@Noseratio我不太確定。它甚至可能會變慢,因爲除了循環和分配以外沒有其他工作。 –

+4

@Noseratio「對嗎?」不一定。根據列表的大小,創建任務和同步機制的成本可能會縮短執行時間。 –

回答

1

如果在所有這些屬性隱藏類實現共同的接口暴露ListingID屬性中的項目的設置屬性,你可以做到以下幾點:

foreach(var listing in listings) 
{ 
    // does not create new list or array! just prepares in-memory query 
    var items = listing.Reviews 
         .Concat<IEntity>(listing.OpenHours) 
         .Concat<IEntity>(listing.Photos) 
         .Concat<IEntity>(listing.Types); 

    foreach(var item in items) 
     item.ListingID = listing.ListingID; 
} 

儘管,有人可能會發現它更具可讀性一點點,我不希望它是比你目前的方法快。