Visifire Chart反转循环顺序

时间:2016-12-21 07:26:56

标签: c# wpf xaml silverlight

我正在运行一个foreach循环,返回结果如下:

1
2
3
4
5
6
7
8
9
10

然而,我将这些结果作为数据点放在foreach中。 但是在页面本身上,结果会被交换 它们显示如下:

10
9
8
7
6
5
4
3
2
1

foreach循环如下所示:

int count = 0;
foreach (DetectorStatu status in loadOperation.Entities.OrderBy(d => d.Status))
{
    Detector selectedDetector = status.Detector as Detector;
    bool isAtlasFO = selectedDetector.EnabledDetectorTypes.Count(d => d.DetectorTypeID == 1) > 0;

    if (isAtlasFO)
    {
        DataPoint dataPoint1 = new DataPoint()
        {
            YValue = status.Status * 100.0,
            ToolTipText = GetTooltipText(status),
            Cursor = Cursors.Hand,
            Tag = status.Detector,
            AxisXLabel = status.DetectorID.ToString() + " ⚫"
        };

        DataPoint dataPoint2 = new DataPoint()
        {
            YValue = DateTimeOffset.Now.Subtract(status.DateTime).TotalHours,
            ToolTipText = GetTooltipText(status),
            Cursor = Cursors.Hand,
            Tag = status.Detector,
            AxisXLabel = status.DetectorID.ToString() + " ⚫"
        };

        dataPoint1.MouseLeftButtonDown += DataPointClicked;
        dataPoint2.MouseLeftButtonDown += DataPointClicked;

        chart.Series[0].DataPoints.Add(dataPoint1);
        chart.Series[1].DataPoints.Add(dataPoint2);
        count++;
        if (count == 10)
        {
            break;
        }//Break loop when 25 is hit.
    }//End if Atlas FO
}//End Foreach loop
  

现在我的问题是:

foreach循环得到的结果与第一个示例相同。但是,数据点交换它们,如第二个示例所示。

如何阻止这种情况发生?

使用当前代码( Orderby ),它会返回:

OrderbyAscending

使用 OrderbyDescending ,它会返回:

OrderByDescending

现在我想要的是orderByAscending。但逆转了。因为现在它在顶部而不是底部显示最佳。

此外,我不能采取x(我以前做过),因为现在,我正在使用if语句。

例如:

1
2 //
3 //
4 //
5
6
7 //
8
9 //
10

这是我采取的前10个结果(如果我要求的话)。但是那些在他们后面的人是那些符合我的if语句的人。

所以在这种情况下,我拿10但只得到5 这也是为什么我在我的foreach中有一个计数。它计算结果,当我达到10时,它会打破循环。

1 个答案:

答案 0 :(得分:1)

如果Status保留该值,则使用降序循环

foreach (DetectorStatu status in loadOperation.Entities.OrderByDescending(d => d.Status))

尝试使用OrderBy(将按升序排序)

foreach (DetectorStatu status in loadOperation.Entities.OrderBy(d => d.Status))

编辑:

你可以获得Ordered 10并将其反转,

 foreach (DetectorStatu status in loadOperation.Entities.OrderByDescending(d => d.Status).Where(d=> ((d as DetectorStatu).Detector as Detector).EnabledDetectorTypes.Count(d => d.DetectorTypeID == 1) > 0).Take(10).Reverse())