Visifire 图表反转循环顺序
Posted
技术标签:
【中文标题】Visifire 图表反转循环顺序【英文标题】:Visifire Chart Reversed loop order 【发布时间】:2017-05-06 13:16:32 【问题描述】:我正在运行一个 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) 它会返回:
使用 OrderbyDescending 会返回:
现在我想要的是 orderByAscending。但是反过来了。因为现在它在顶部而不是底部显示最好的。
我也不能接受 x(我以前做的),因为现在我正在使用 if 语句。
例如:
1
2 //
3 //
4 //
5
6
7 //
8
9 //
10
这些是我获得的前 10 个结果(如果我要求的话)。但是后面有//的就是符合我的if语句的。
所以在这种情况下,我取 10 但只取 5。 这也是为什么我在我的 foreach 中有一个计数。它计算结果,当我达到 10 时,它会中断循环。
【问题讨论】:
什么是状态?那里有订单详情吗? 状态从 0,01 变为 1。所以基本上我在我的问题中显示了有序,但随后数字更大:) foreach (DetectorStatu status in loadOperation.Entities.OrderByDescending(d => d.Status)) ....你能试试 OrderByAscending 吗? 当我这样做时,它会向我显示我给出的示例中的结果。我希望它从坏(上)到好(下)但是相反,它从坏(下)到好(上) 【参考方案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())
【讨论】:
对我的问题进行了编辑。您还可以看到 2 个完全不同的图像。这是因为我只抓取 10 个结果,而可能有 20+ 这样做时,我得到的结果与显示的图像相同。它从坏(底部)到好(顶部)。问题是,foreach 以正确的顺序给出了结果。但我认为正在发生的是第一个结果变成了一个数据点并被放置。然后第二个结果来了,也变成了一个数据点。但是被放置在第一个之上。但是我不知道如何解决这个问题。 @Mitch 你能把DataPoints存储到SeparateCollection,最后反转,然后分配给Chart系列吗? 还可以查看我的编辑。 让我们continue this discussion in chat。以上是关于Visifire 图表反转循环顺序的主要内容,如果未能解决你的问题,请参考以下文章