这里有一个情况,虽然我有几种方法可以解决这个问题,但我非常觉得这不是我现在正在做的最好的解决方法。让我先尝试解释我的问题。从数据库中,我得到一个 NavReturnModelSP 的 IEnumerable,其中 NavReturnModelSP 是一个简单的模型类,例如
public class NavReturnModelSP
{
public string Scheme_Name { get; set; }
public DateTime Date { get; set; }
public double ReInvest_Nav { get; set; }
}
现在我需要先按 Scheme_Name 和 Date 对集合进行排序,然后需要将每个 Scheme 和 Date 对值重新设置为 100 的基数,以便从第一个日期开始在方案之间进行适当的比较。我无法更改数据库输出。下面是一张图片供您参考,希望它能更好地解释您的问题。
我现在只是通过循环来解决它......其中“数据”是 NavReturnModelSP 的 IEnumerable
var preModel = data.OrderBy(x => x.Scheme_Name).ThenBy(x => x.Date).ToList();
var preScheme = "";
var firstNav = 0d;
for (int i = 0; i < preModel.Count(); i++)
{
if (preModel[i].Scheme_Name != preScheme)
{
firstNav = preModel[i].ReInvest_Nav;
preModel[i].ReInvest_Nav = 100;
}
else
{
if (preModel[i - 1].ReInvest_Nav != 0) // Just a check, nothing special.
preModel[i].ReInvest_Nav = 100 * preModel[i].ReInvest_Nav / firstNav;
}
preScheme = preModel[i].Scheme_Name;
}
现在,我在 ReInvest_Nav 列中拥有带有重新定位数据的“preModel”。但我觉得我没有使用适当的 CPU 功能,我可以使用并行编程/PLINQ 来最小化时间框架,因为 100000 行循环会很慢。有人可以指导我吗。
谢谢和新年快乐:) 桑杰