【发布时间】:2019-04-30 09:43:02
【问题描述】:
我想把这个扁平化的表放到类级别的主从层次结构中
| Type | DateTime | Value |
-----------------------------
| 4711 | 2018-01-01 | 0.7 |
| 4711 | 2018-01-02 | 0.8 |
| 4711 | 2018-01-03 | 0.9 |
| 4711 | 2018-01-04 | 1.0 |
| 4712 | 2018-01-01 | 3.2 |
| 4712 | 2018-01-02 | 2.7 |
| 4712 | 2018-01-03 | 5.6 |
| 4712 | 2018-01-04 | 1.9 |
类结构
[Table("TypeValues")]
public class TypeMaster
{
[Column("Type")]
public int Type { get; set; }
[ForeignKey("Type")]
public virtual ICollection<TypeValue> Values { get; set; }
}
[Table("TypeValues")]
public class TypeValue
{
[Column("DateTime")]
public DateTime TimeStamp { get; set; }
[Column("Value")]
public float? Value { get; set; }
public TypeMaster Index { get; set; }
}
我已经尝试了基于类型和日期时间的复合键之间的几种变体,但每次都有新的挑战阻止我完成这个简单的任务。我已经不知道了。
最后我不希望有像类型这样的冗余数据。我想要按该类型分组的数据。
{
"Result": [
{
"Type": "4711",
"Values": [
{
"TimeStamp": "2018-01-01",
"Value": "0.7"
},
{
"TimeStamp": "2018-01-02",
"Value": "0.8"
},
{
"TimeStamp": "2018-01-03",
"Value": "0.9"
},
{
"TimeStamp": "2018-01-04",
"Value": "1.0"
}
]
},
{
"Type": "4712",
"Values": [
{
"TimeStamp": "2018-01-01",
"Value": "3.2"
},
{
"TimeStamp": "2018-01-02",
"Value": "2.7"
},
{
"TimeStamp": "2018-01-03",
"Value": "5.6"
},
{
"TimeStamp": "2018-01-04",
"Value": "1.9"
}
]
}
]
}
更新
为了说明这一点。我需要一个可以将 IQueryable 转发到以下服务的解决方案。解决方案不是手动对数据进行分组,而是使用 List。
所以我需要在模型级别解决这个问题。
【问题讨论】:
-
只使用
GroupBy(x=>x.Type)here -
表拆分不能用于规范化不良的数据模型。
-
对不起,我忘了说这是不可能的。我需要通过设计类和使用模型构建器来做到这一点
-
@GertArnold:好的,我还有哪些其他选择?
-
@masterchris_99 表拆分用于一对一关系。您的 only 选项是使用查询 (
GroupBy)。您无法在模型级别解决它。
标签: c# asp.net .net database entity-framework