我想将此展平表放在类级别的主从层次结构中
| 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 <>进行处理。
所以我需要在模型级别解决这个问题。
答案 0 :(得分:-1)
此代码可以工作吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication86
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("Type", typeof(int));
dt.Columns.Add("DateTime", typeof(DateTime));
dt.Columns.Add("Value", typeof(float));
dt.Rows.Add(new object[] {4711, DateTime.Parse("2018-01-01"), 0.7 });
dt.Rows.Add(new object[] {4711, DateTime.Parse("2018-01-02"), 0.8 });
dt.Rows.Add(new object[] {4711, DateTime.Parse("2018-01-03"), 0.9 });
dt.Rows.Add(new object[] {4711, DateTime.Parse("2018-01-04"), 1.0 });
dt.Rows.Add(new object[] {4712, DateTime.Parse("2018-01-01"), 3.2 });
dt.Rows.Add(new object[] {4712, DateTime.Parse("2018-01-02"), 2.7 });
dt.Rows.Add(new object[] {4712, DateTime.Parse("2018-01-03"), 5.6 });
dt.Rows.Add(new object[] {4712, DateTime.Parse("2018-01-04"), 1.9 });
var groups = dt.AsEnumerable().GroupBy(x => x.Field<int>("Type")).ToList();
List<TypeMaster> data = (from g in groups
select new { grp = new TypeMaster() { Type = g.Key }, rows = g })
.Select(x => new TypeMaster() {
Type = x.grp.Type,
Values = x.grp.Values = x.rows.Select(y => new TypeValue() {
TimeStamp = y.Field<DateTime>("DateTime"),
Value = y.Field<float>("Value"),
Index = x.grp
}).ToList()
}).ToList();
}
}
[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; }
}
}