如何将已排序的集合返回给ListView?

时间:2015-12-16 21:19:31

标签: c# entity-framework linq listview ienumerable

我有使用EF访问的数据('DogWalk')。在运行时,我正在确定DogWalk相对于输入的邮政编码的距离。这很好,但是,我无法将IEnumerable 已排序集合返回到ListView

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

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

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

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插入顺序,这可能会有问题。

我有什么选择?

1 个答案:

答案 0 :(得分:0)

将您的排序结果作为Enumerable返回:

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

应保留排序顺序。

但是,List<T>实施了IEnumerable,因此您实际上应该可以直接使用该列表作为ListView的数据源。