2010-11-16 6 views
1

j'ai un ViewModel sculpté de plusieurs relations Entité:Entity Framework 4/Linq: Comment OrderBy() une entité hiérarchique?

Products[].Prices[].Others[].myField 

Comment puis-je commander des produits [] par le myField imbriqué? Quand je fais la clause Where, il est comme ça:

Products.Where(p => p.Prices.Any(q => q.Others.Any(r => r.myField == 4))); 

Donc, si je voulais Products.OrderBy() et de l'ordre par myField, à quoi ressemblerait l'expression comme?

Products.OrderBy(p => p.Prices.SelectMany(?? 
+0

Peut-être que vous pouvez préciser un exemple résultat que vous essayez de tirer en arrière? L'imbrication de cette profondeur est généralement utilisée pour inclure des relations dans le résultat final, sans réellement affecter la requête elle-même. – RPM1984

+0

consultez http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx il m'a aidé à plusieurs reprises. – Gage

Répondre

1

Comme vous avez plusieurs prix ci-dessous votre produit, vous devez sélectionner un pour trier sur, comme

Products.OrderBy(p => p.Prices.First().Others.First().myField) 

ou si vous voulez commander par le prix le plus élevé

Products.OrderBy(p => p.Prices.OrderByDescending(price => price.Value).First().Others.First().myField) 
1

Je suppose que les prix a un champ Value qui est le type principal ou le type comparable de sorte que vous avez:

Products.OrderBy(p => p.Prices.Average(x=>x.Value)) 

ou

Products.OrderBy(p => p.Prices.Min(x=>x.Value)) 
Questions connexes