C# Visifire图表反向循环顺序

C# Visifire图表反向循环顺序,c#,wpf,xaml,silverlight,C#,Wpf,Xaml,Silverlight,我正在运行foreach循环,返回如下结果: 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1 int count = 0; foreach (DetectorStatu status in loadOperation.Entities.OrderBy(d => d.Status)) { Detector selectedDetector = status.Detector as Detector; bool isAtlasFO = s

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

1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
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中。 但在页面本身,结果会被交换。
他们的表现如下:

1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
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循环如下所示:

1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
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)返回以下内容:

使用降序排序返回以下内容:

现在我想要的是OrderBy升序。但情况正好相反。因为现在它在顶部而不是底部显示最好的

另外,我不能接受x(我以前做的),因为现在我使用的是if语句

例如:

1
2 //
3 //
4 //
5
6
7 //
8
9 //
10
这是我得到的前10个结果(如果我要求的话)。但是后面有//的是符合我的if语句的

所以在这种情况下,我取10,但只取5。

这也是为什么我的foreach中有一个count。它计算结果,当我点击10时,它打破循环。

如果
状态
保持该值,则按降序循环

foreach (DetectorStatu status in loadOperation.Entities.OrderByDescending(d => d.Status))
尝试使用OrderBy(它将按升序排序)

编辑:

你可以得到订购的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())

什么是地位?这就是您的订单详细信息吗?状态从0,01变为1。基本上,我在问题中展示的是有序的,但随后是更大的数字:)foreach(loadOperation.Entities.OrderByDescending(d=>d.status)){……你能试试OrderByAscending吗?当我这样做时,它会显示我给出的示例中的结果。我希望它从坏(顶部)变为好(底部)但是,它从坏(底部)到好(顶部)在我的问题中进行了编辑。你还可以看到两个完全不同的图像。这是因为我只抓取了10个结果,而这样做时可能有20多个结果,它给我的结果与图中显示的结果相同。它从坏(底部)到好(顶部)。问题是,foreach以正确的顺序给出结果。但我认为发生的是,第一个结果变成了一个数据点并被放置。然后第二个结果来了,也变成了一个数据点。但是被放置在第一个结果的顶部。但是我不知道如何解决这个问题。@Mitch你能将数据点存储到分离集合,最后将其反转,然后分配给图表系列?并查看我的编辑。让我们来看看。