作者Peruheru (还在想)
看板C_Sharp
标题[问题] Entity Framework是否能产生巢状物件
时间Tue Jul 14 11:53:49 2015
假设两个Class
public class classA
{
public string prop1 { get; set; }
public classB prop2 { get; set; }
}
public class classB
{
public string innerProp1 { get; set; }
public string innerProp2 { get; set; }
}
如上, classA 内有 classB 的结构
而资料库就是 prop1 和 prop2 两个文字栏位而已
我得手动将 prop2 拆解成 classB 的结构
没有什麽复杂的逻辑,就只是第一个字存在 innerProp1 ,之後的字存在 innerProp2
原本想写成如下的样子
from q in table1
select new classA
{
prop1 = q.column1,
prop2 = new classB
{
innerProp1 = q.column2.substring(0, 1),
innerProp2 = q.column2.substring(1)
}
}
不过就收到错误讯息:
LINQ to Entities 中仅支援无参数建构函式和初始设定式
这表示无法在查询时直接产生这样的结构吗?
还是说有什麽方法可以达成一次就产生这结构呢?
我在将旧有资料库写成.NET Web API
为了要让column2这栏位也能使用OData去查询
就必须得先把它拆开
(不过老实说我也不知道拆开後能不能查这种结构...)
其实内部class内是含有文字与数字的,会需要比文字也需要比数字大小
只是为了将问题单纯化先省略这部分
另外这个栏位其实有好几个,全都要做一样的处理
如果不能产生或不能查的话
说不定就只能写成这种样子
public class classA
{
public string prop1 { get; set; }
public string innerProp1 { get; set; }
public string innerProp2 { get; set; }
}
问题是这栏位好几个,里面要拆成的栏位也好几个
若非不得已实在不想这样做orz
先感谢各位的帮助
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.134.18.8
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1436846031.A.741.html
※ 编辑: Peruheru (220.134.18.8), 07/14/2015 12:07:15
1F:→ GoalBased: 你的classA对应talbeA 里面有两个字串栏位吗? 07/14 12:20
2F:→ GoalBased: 如果是的话,不理解你拆成两个class的用意 07/14 12:21
3F:→ GoalBased: 另外你文中虽然说想要一次就产生,那拆开不行吗? 07/14 12:24
4F:→ GoalBased: 先把table1资料捞出来,自己组合classA这样 07/14 12:25
老实说那栏位存的是时段
位置1是星期几,2和3是开始时间,3和4是结束时间
然後也有可能有特殊时段,只能照存
所以会需要4个栏位:特殊资料、星期、开始、结束
这四个栏位合在一起就是针对"某一个时段"的完整描述
然後这样的时间栏位一共有5个,资料库写成 time1 time2 time3...
既然他们都会有一样的长相,想要用一个class来描述这个"时段"结构
这样的想法,是比较难以理解的吗? 囧
其实我甚至还希望可以用集合来表现时段,因为不是每笔资料都会有五个时段描述
只是这样好像更复杂了
拆开可以呀,就是我最後提到那个做法,把他全部并列成同样层级的栏位
那就是5 x 4共有20栏而已
我知道可以照上面的做法,只是想问的是有没有更棒的方式来做
不然也只能这样了吧 orz
※ 编辑: Peruheru (220.134.18.8), 07/14/2015 13:32:37
5F:推 Litfal: 你要做资料库正规化...把时段抽出成一个独立的Table 07/15 21:56