Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算最后X个记录数的平均值_C#_Linq - Fatal编程技术网

C# 计算最后X个记录数的平均值

C# 计算最后X个记录数的平均值,c#,linq,C#,Linq,我试图计算一个字段最后(2)次出现的平均值 例如,这是一个示例数据集 Name VLoad Sload Timestamp DT5227 254.1 270.5 19-09-2018 33:22 PM DT5237 237.1 278.5 19-09-2018 33:22 PM DT5237 237.1 278.5 19-09-2018 33:20 PM DT5227 254.1 266 19-09-2018 33:20 PM DT523

我试图计算一个字段最后(2)次出现的平均值

例如,这是一个示例数据集

Name    VLoad   Sload   Timestamp
DT5227  254.1   270.5   19-09-2018 33:22 PM
DT5237  237.1   278.5   19-09-2018 33:22 PM
DT5237  237.1   278.5   19-09-2018 33:20 PM
DT5227  254.1   266     19-09-2018 33:20 PM
DT5237  237.1   278.5   19-09-2018 33:18 PM
DT5227  254.1   270.8   19-09-2018 33:18 PM
DT5227  254.1   273     19-09-2018 33:16 PM
DT5237  237.1   278.4   19-09-2018 33:16 PM
DT5227  254.1   273.1   19-09-2018 33:14 PM
DT5237  237.1   278.5   19-09-2018 33:14 PM
DT5227  254.1   275.8   19-09-2018 33:12 PM
DT5237  237.1   278.6   19-09-2018 33:12 PM
DT5237  237.1   278.6   19-09-2018 33:10 PM
DT5227  254.1   268     19-09-2018 33:10 PM
DT5237  237.1   278.6   19-09-2018 33:08 PM
DT5227  254.1   266.9   19-09-2018 33:08 PM
DT5237  237.1   278.5   19-09-2018 33:06 PM
现在有很多“名称”,但我试图计算列表中每个名称的最后5个实例的VLoad平均值

我的努力:

var groups = (from x in _unitOfWork.Repository<Trucks>().Queryable()
group x by new {x.Name,x.Timestamp}
into gResult
select new
{
    gResult.Key.Name,
    Average = gResult.Average(x => x.VLoad),
    gResult.Key.Timestamp
});

var result = groups.GroupBy(x => x.Name).SelectMany(x => x.OrderBy(r => r.Timestamp))
            .Take(2);
var groups=(来自_unitOfWork.Repository().Queryable()中的x)
按新{x.Name,x.Timestamp}分组x
进入大结局
选择新的
{
gResult.Key.Name,
平均值=结果平均值(x=>x.v负载),
gResult.Key.Timestamp
});
var result=groups.GroupBy(x=>x.Name)。SelectMany(x=>x.OrderBy(r=>r.Timestamp))
.采取(2);
我并没有得到预期的结果。有人能帮我解决我的Linq问题吗


谢谢

检索按名称和时间戳排序的所有行后,可以使用队列数据结构为每个名称迭代添加值,并且只使用最后的X个添加值来计算平均值


这不是最有效的方法,但它会起作用。

如果我的猜测是正确的,这应该可以解决您的问题


@Navyseal如果您对代码有任何疑问,请随时提问
public static void Main()
{
    var records = new []
    {
        new Record {Name = "DT5227", Vload = 0, Sload = 270.5, Timestamp = "18-09-2018 31:22 PM" },
        new Record {Name = "DT5227", Vload = 254.1, Sload = 270.5, Timestamp = "19-09-2018 31:22 PM" },
        new Record {Name = "DT5227", Vload = 264.1, Sload = 270.5, Timestamp = "19-09-2018 33:22 PM" }
    };

    var results = records.GroupBy(x => x.Name)
         .Select(x => x
             .OrderByDescending(r => r.Timestamp) // be sure to use DateTime here
             .Take(2) // take last two thanks to OrderByDescending
             .Select(r => r.Vload).Average()); // Builtin average!

    // do what you want with results
    Console.WriteLine(results.First());
}