gpt4 book ai didi

c# - 使用 LINQ 旋转数据

转载 作者:太空宇宙 更新时间:2023-11-03 20:12:02 25 4
gpt4 key购买 nike

我从数据库中以这种形式获取数据:

Item    Collection_Period   Value
==== ================= =====
Item3 201307 27.2
Item4 201308 19
Item3 201209 2.1
Item2 201307 345
Item1 201309 13.11
Item2 201308 34
Item3 200609 85
Item4 201308 58.2
Item3 201209 2.4
Item2 201309 12.1
Item1 201209 12.3

我需要以这种方式操作数据:

Item    CurrMon-3   CurrMon-2   CurrMon-1
===== ========= ========= =========
Item1 13.11
Item2 345 34 12.1
Item3 27.2
Item4 19 58.2

(只需要显示最近三个月的数据)。我正在尝试这个:

public List<PivotedMean> AssociateResultsWithCollectionDate(List<MeanData> meanData)
{
var pivoted = new List<PivotedMean>();
var currentMonth = DateTime.Now.Month;
var results = meanData
.GroupBy(i => i.Description)
.Select(g => new
{
Description = g.Key,
month3 = g.Where(c => c.CollPeriod.Month == currentMonth - 3),
month2 = g.Where(c => c.CollPeriod.Month == currentMonth - 2),
month1 = g.Where(c => c.CollPeriod.Month == currentMonth - 1)
});
return pivoted;
}

我有一个类来保存这些数据:

public class PivotedMean
{
public string Description { get; set; }
public long Month3 { get; set; }
public long Month2 { get; set; }
public long Month1 { get; set; }
}

尽管 PivotedMean 类似乎与 Linq 查询输出对齐,但当我将 var results = 替换为 pivoted = 时出现错误.

最佳答案

那是因为 pivoted 是 PivotedMean 的列表,LINQ 查询(在您的情况下)返回匿名类的 IEnumerable

  • 您可以在 LINQ 查询的末尾添加 .ToList() 以将其评估为列表。
  • 您可以将其映射到 PivotedMean 实例而不是匿名对象。

例如:

public List<PivotedMean> AssociateResultsWithCollectionDate(List<MeanData> meanData)
{

var currentMonth = DateTime.Now.Month;
return meanData
.GroupBy(i => i.Description)
.Select(g => new PivotedMean // notice the class name here
{ // this is now a PivotedMean initializer
Description = g.Key, // You were also missing some caps here
Month3 = g.Where(c => c.CollPeriod.Month == currentMonth - 3),
Month2 = g.Where(c => c.CollPeriod.Month == currentMonth - 2),
Month1 = g.Where(c => c.CollPeriod.Month == currentMonth - 1)
}).ToList(); // notice the ToList

}

或者,尽可能使用 IEnumerable 而不是 List。它们提供了对“经历事物”的抽象。

当您编码时,针对接口(interface)而不是实现进行编码被认为是最佳实践,因为您只担心并依赖于元素的行为,而不是它们的实际类型。

关于c# - 使用 LINQ 旋转数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19420400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com