如何return一个排序好的集合到ListView?

How to return a sorted collection to ListView?

我有正在使用 EF 访问的数据 ('DogWalk')。在运行时,我正在确定 DogWalk 相对于输入的邮政编码的距离。这工作正常,但是,我在 return 将 IEnumerable sorted 集合添加到 ListView.

时遇到了问题

代码是方法的一部分 public IEnumerable<DogWalk> ListView1_GetData()。我有一个包含所有步行的列表

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

我遍历遍历并将它们添加到存储 {double distance, DogWalk theWalk} 的结构中。我还创建了一个列表来存储匿名结构对象:

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));

问题是我需要 return 一个 IEnumerable 集合。我可以做类似的事情:

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

但是对于 IEnumerable not guaranteeing 插入顺序,这可能会有问题。

我有哪些选择?

将您的排序结果作为 Enumerable 返回,如下所示:

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

应保留排序顺序。

但是,List<T> 实现了 IEnumerable,因此您实际上应该能够直接将列表用作 ListView.

的数据源