【问题标题】:IEnumerable OrderBy [closed]IEnumerable OrderBy [关闭]
【发布时间】:2010-09-27 11:59:12
【问题描述】:

我正在使用 IEnumerable orderby 以升序格式对我的项目进行排序,但它不起作用我的查询是这样的:

IEnumerable<Step> steps = allsteps.Where(step => step.X <= Y);

steps = steps.OrderBy(step => step.X);

不支持使用 OrderBy 或 OrderByDescending

为什么?

我想用Sum()方法总结一些物品,物品顺序很重要(有一些规则)

我在 MSDN 中读到应该枚举工作但有什么好方法(我没有尝试过)。

编辑:XY 的类型为 double。 我在快速观看中检查了我的步骤的第一项 (steps.First())。

【问题讨论】:

  • 你如何检查结果?
  • 当您只检查第一个元素时...您确定steps 中的所有元素都没有相同的 X 值吗?
  • 您可以提供 Sum 方法来查看发生了什么,因为在您编写它时选择和排序适用于双精度值。
  • digEmAll 指出了好消息,我的列表中只有一项!!!对不起大家

标签: c# linq ienumerable sql-order-by


【解决方案1】:

首先,为什么不把它放在一行上。

var steps = allsteps.Where(step => step.X <= Y).OrderBy(step => step.X);

正如“vc 74”在他的评论中指出的那样,如果X 不是原始的或没有实现IComparableIComparable&lt;TypeOfX&gt;,那么您将无法订购您的清单,或没有 LINQ。

【讨论】:

    【解决方案2】:

    这只是按预期工作:

    // Create some random double values from 0 - 100
    var values = Enumerable.Repeat(new Random(), int.MaxValue)
                           .Select(r => r.NextDouble() * 100);
    
    //Create an enumeration with ten elements
    var pointList = values.Take(10)
                          //Cause of lacking support of IEnumerable.Zip() or .Pairwise()
                          //use this approach to create something with the properties X and Y
                          .Select(n => new PointF((float)n, (float)values.First()));
    
    //Sort the elements
    var sortedPoints = pointList.OrderBy(point => point.X);
    
    //Output to console
    foreach (var point in sortedPoints)
    {
        Console.WriteLine(point.ToString());
    }
    

    【讨论】:

      【解决方案3】:

      遇到了一个非常相似的问题:

      IEnumerable<Article> articles = StepThree.ReturnArticles(iUserID);
      lvPending.DataSource = articles;
      lvPending.DataBind();
      

      想要更改结果将绑定到我的列表视图的顺序,所以我尝试了这个:

      lvPending.DataSource = articles.OrderByDescending(a=> a.DateCreated);
      

      它执行了,但没有更新我的结果。所以进一步看,我发现因为我返回一个复杂类型的 linq 无法为我排序,所以我不得不在调用 ReturnArticles 方法的 StepThree.cs 文件中按降序添加 orderby。

      【讨论】:

      • 嗨,大卫,这个问题是针对我刚接触 linq 时提出的 :) 这是一个简单的错误,它工作正常,但我看不到它(当时)。
      • @SaeedAmiri:既然你解决了你的问题,最好将你的解决方案发布给其他偶然发现这篇文章的人。
      • @Matthew,您可以看到问题上的 cmets,实际上没有任何问题,列表只有一个元素。我没有删除问题,因为一些答案已经投票,他们试图解决问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 2019-12-26
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多