我有一个旧数据库,其中包含以下格式(简化)的年度数据:
CategoryId | CategoryName | CountryId | CountryName | Offset | Year0 | Year1 | Year2 | Year3 | Year4 |
------------------------------------------------------------------------------------------------------
1 | Potatoes | 2 | Latvia | 2001 | 123 | 123 | 123 | 123 | 123 |
如您所见,这是时间序列数据,存储5年的数据。根据{{1}}列,Offset
列将代表不同的年份。
因此在这种情况下,它可以理解为:
Year[0-4]
如果CategoryId | CategoryName | CountryId | CountryName | 2001 | 2002 | 2003 | 2004 | 2005 |
----------------------------------------------------------------------------------------
1 | Potatoes | 2 | Latvia | 123 | 123 | 123 | 123 | 123 |
发生变化,列含义也将发生变化。
我将致力于编写必须使用此数据库的服务,我想将这些结果映射到这种结构:
Offset
年份列应映射到public class Category
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Country
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Datum
{
public int Year { get; set; }
public decimal Sales { get; set; }
}
public class Experiment
{
public Category Category { get; set; }
public Country Country { get; set; }
public IEnumerable<Datum> Datum { get; set; }
}
,然后整个对象可以表示如下:
IEnumerable<Datum>
如何使用EF Core做到这一点?
请求的更新。如评论中所建议的那样,使用Linq并不是很难,但是我想知道是否可以将此映射合并到EF Core中。
new Experiment
{
Category = new Category { Id = 1, Name = "Potatoes" },
Country = new Country { Id = 2, Name = "Latvia" },
Datum = new List<Datum>
{
new Datum { Year = 2001, Sales = 123 },
new Datum { Year = 2002, Sales = 123 },
new Datum { Year = 2002, Sales = 123 },
new Datum { Year = 2003, Sales = 123 },
new Datum { Year = 2004, Sales = 123 }
}
};