c# LINQ创建一个带有动态索引的临时变量

本文关键字:索引 动态 变量 一个 创建 LINQ | 更新日期: 2023-09-27 18:02:20

var newList = data.GroupBy(x => new { x.Symbol })
            .Select
            (
                x =>
                {
                    var subList = x.OrderBy(y => y.Date).ToList();
                    return subList.Select((y, idx) => new
                    {
                        Symbol = y.Symbol,
                        Close = y.Close,
                        Date = y.Date,
                        /*p = (idx < 1) ? null : subList.Skip(idx - 1)
                          .Take(2).Select(o => o.Close).ToList()*/,
                        Vol = (idx < 1) ? 0 : new DescriptiveStatistics
                           (subList.Skip(idx - 1).Take(2).Select(o => (double)o.Close/(double)
                           subList.ElementAt(idx - 1).Close).ToList()).StandardDeviation,
                    });
                }
            )
            .SelectMany(x => x)
            .ToList();

我想创建一个变量p = (idx < 1) ? null : subList.Skip(idx - 1).Take(2).Select(o => o.Close).ToList()Vol的相同索引idx,但不出现在return中,只是一个临时变量(但必须使用同步idx作为Vol)。那么在哪里写p或者如何改变语法

c# LINQ创建一个带有动态索引的临时变量

你可以保存一个临时变量,就像你对subList所做的那样,尽管我没有一个测试结构来构建像下面这样的东西应该可以工作。

var newList = data.GroupBy(x => new { x.Symbol })
.Select
(
    x =>
    {
        var subList = x.OrderBy(y => y.Date).ToList();
        return subList.Select((y, idx) => { //return is a function not an object
            var p = (idx < 1) ? null : subList.Skip(idx - 1).Take(2).Select(o => o.Close).ToList(); //your p
            return new //this return returns the object definition
            {
                Symbol = y.Symbol,
                Close = y.Close,
                Date = y.Date,
                Vol = p == null ? 0 : new DescriptiveStatistics(subList.Skip(idx - 1).Take(2).Select(o => (double)o.Close / (double)subList.ElementAt(idx - 1).Close).ToList()).StandardDeviation,
            };
        });
    }
)
.SelectMany(x => x)
.ToList();