IEnumerable OrderBy

时间:2010-09-27 11:59:12

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

我正在使用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())。

3 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:3)

这只是按预期工作:

// 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());
}

答案 2 :(得分:3)

与此问题非常相似:

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

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

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

已执行,但未更新我的结果。所以我进一步发现,因为我正在返回一个复杂类型,linq不能为我订购它,所以我不得不在StepThree.cs文件中添加orderby下降,其中调用ReturnArticles方法。