2010-11-06 166 views
1

我在ASP.NET MVC中使用.NET Framework 3.5,而我正在使用Linq To Entity來處理我的數據對象。.NET Framework 3.5 EntityCollection OrderBy問題

我有一個促銷對象,它與Location對象有一對多的關係。

我想要做的是從Promotion對象中獲取位置的集合,並將它們排序而不將它們放入另一個變量中。像...

promotionEntity.Locations.OrderBy(l => l.Distance); 

但它對* .Locations集合沒有任何作用。有沒有一種方法,我可以讓EntityCollection按我的需要排序,而不必將它放入另一個List或變量中?

謝謝。

回答

1

如果位置類型爲IEnumerable的你可以指定排序依據的結果:

promotionEntity.Locations = promotionEntity.Locations.OrderBy(l => l.Distance)

如果類型是一樣的東西List<Location>那麼你可能會創建一個新的列表:

promotionEntity.Locations = new List<Location>(promotionEntity.Locations.OrderBy(l => l.Distance));

+0

我會用'promotionEntity.Locations = promotionEntity.Locations.OrderBy(L =去> 1 .Distance).ToList();'在第二種情況下。 – Yakimych 2010-11-07 16:15:14

+0

這是我想要做的更多。 promotionEntity.Locations類型爲EntityCollection,*。OrderBy使其成爲System.Linq.IOrderedEnumberable 並且它們不會自動投射。它說有一個明確的轉換確實存在。我只是沒有想到這一點。 – 2010-11-08 21:01:28

0

一種方法是使用EntityCollection.CreateSourceQuery Method

var promotionEntity = context.Promotions.First(); 
var sq = product.Locations.CreateSourceQuery().OrderBy(l => l.Distance); 
promotionEntity.Locations.Attach(sq); 

或者,如果你不關心結果對象的類型可以做一個匿名類型裏面投射:

var promotionEntity = context.Promotions.Select(p => new 
{ 
    p, 
    Locations = p.Locations.OrderBy(l => l.Distance) 
}).First();