2015-12-16 1 views
0

У меня есть данные («DogWalk»), с которыми я обращаюсь с EF. Во время выполнения я определяю расстояние DogWalk относительно введенного почтового индекса. Это прекрасно работает, однако, у меня возникли проблемы с возвратом коллекции IEnumerable в ListView.Как вернуть отсортированную коллекцию в ListView?

Код является частью метода public IEnumerable<DogWalk> ListView1_GetData(). У меня есть список, который содержит все прогулки

List<DogWalk> grabAllWalks = (from w in db.DogWalks.Include("Pictures") 
             select w).ToList(); 

я Переберите прогулки и добавить их на структуру, в которой хранится {double distance, DogWalk theWalk}. Я также создать список для хранения скрытых объектов STRUCT:

var inRangeWalks = new List<InRangeWalks>(); 
foreach (var walk in grabAllWalks) 
    { 
    double dis = ....; 

    if (dis <= radius) //if within range, add to list 
    { 
    inRangeWalks.Add(new InRangeWalks(dis, walk)); 
    } 
} 

я теперь сортирую список, основанный на расстояниях почтовых адресов:

inRangeWalks.Sort((x, y) => x.DistanceFromPostcode.CompareTo(y.DistanceFromPostcode)); 

Проблема заключается в том, что мне нужно, чтобы вернуть IEnumerable коллекции. Я мог бы сделать что-то вроде:

IEnumerable<DogWalk> sortedWalks = inRangeWalks.Select(x => x.Walk); 

Но с IEnumerable not guaranteeing порядка вставки, это может быть проблематичным.

Какие у меня варианты?

ответ

0

Возвращение результата своего рода как перечислимые так:

var result = inRangeWalks.Sort((x, y) => 
        x.DistanceFromPostcode.CompareTo(y.DistanceFromPostcode)).AsEnumerable(); 

должен сохранять порядок сортировки.

Однако List<T> реализует IEnumerable, поэтому вы действительно должны иметь возможность использовать список непосредственно в качестве источника данных для своего ListView.

+0

Я сделал глупую ошибку, и теперь она работает! Спасибо за отличный ответ и решение (я приму в ~ 3 минуты)! Что такое «лучшее» решение, используя код, который вы написали выше, или просто вернуть список? – gudthing

+0

@gudthing - просто верните список. – ChrisF