2010-11-06 175 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();