2010-11-06 6 views
1

J'utilise .NET Framework 3.5 avec ASP.NET MVC et j'utilise Linq To Entity pour mes objets de données..NET Framework 3.5 EntityCollection OrderBy Question

J'ai un objet de promotion qui a une relation de 1 à plusieurs avec l'objet Location. Ce que je veux faire est de prendre la collection des emplacements de l'objet de promotion et de les trier sans les mettre dans une autre variable. Quelque chose comme ...

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

Mais cela ne fait rien aux collections * .Locations. Y a-t-il un moyen que je puisse avoir ce EntityCollection trié comment j'ai besoin sans le mettre dans une autre liste ou variable?

Merci.

Répondre

1

Si le type d'emplacements est IEnumerable, vous pouvez simplement affecter le résultat de OrderBy:

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

Si le type est quelque chose comme List<Location> alors vous devrez probablement créer une nouvelle liste:

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

+0

je partirais avec 'promotionEntity.Locations = promotionEntity.Locations.OrderBy (l => l .Distance) .ToList(); 'dans le second cas. – Yakimych

+0

C'est plus ce que j'essaie de faire. the promotionEntity.Locations est tapé comme EntityCollection et * .OrderBy en fait un System.Linq.IOrderedEnumberable et ils ne sont pas castés automatiquement. Il dit qu'il existe une conversion explicite. Je n'ai juste pas compris ça. –

0

Une façon est d'utiliser EntityCollection.CreateSourceQuery Method:

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

Ou si vous ne se soucient pas du type d'objet qui en résulte peut faire la projection à l'intérieur d'un type anonyme:

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