【问题标题】:How to return a sorted collection to ListView?如何将排序后的集合返回到 ListView?
【发布时间】:2015-12-16 21:19:31
【问题描述】:

我有正在使用 EF 访问的数据(“DogWalk”)。在运行时,我正在确定 DogWalk 相对于输入邮政编码的距离。这很好用,但是,我无法将 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} 的结构中。我还创建了一个 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 插入顺序,这可能会出现问题。

我有哪些选择?

【问题讨论】:

    标签: c# entity-framework linq listview ienumerable


    【解决方案1】:

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

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

    应该保留排序顺序。

    但是,List&lt;T&gt; 实现了IEnumerable,因此您实际上应该能够直接将列表用作ListView 的数据源。

    【讨论】:

    • 我犯了一个愚蠢的错误,现在它正在工作!感谢您提供出色的答案和解决方案(我会在大约 3 分钟内接受)!使用您在上面编写的代码或仅返回列表,什么是“最佳”解决方案?
    • @gudthing - 只返回列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多