2010-11-06 4 views
1

Я использую .NET Framework 3.5 с ASP.NET MVC, и я использую Linq To Entity для своих объектов данных..NET Framework 3.5 EntityCollection OrderBy Вопрос

У меня есть объект Promotion, который имеет отношение от 1 до многих для объекта Location.

Что я хочу сделать, это взять коллекцию местоположений из объекта Promotion и отсортировать их, не помещая их в другую переменную. Что-то вроде ...

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

Но он ничего не делает для коллекций * .Locations. Есть ли способ, которым я могу иметь, что EntityCollection отсортировал, как мне нужно, не помещая его в другой список или переменную?

Спасибо.

ответ

1

Если тип местонахождений IEnumerable, вы можете просто присвоить результат OrderBy:

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 (л => л .Distance) .ToList(); 'во втором случае. – Yakimych

+0

Это больше я пытаюсь сделать. promotionEntity.Locations вводится как EntityCollection, а * .OrderBy делает его System.Linq.IOrderedEnumberable , и они не автоматически отображаются. В нем говорится, что существует явное преобразование. Я просто не понял этого. –

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(); 
Смежные вопросы