作者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://www.ptt.cc/bbs/C_Sharp/M.1436846031.A.741.html
※ 編輯: Peruheru (220.134.18.8), 07/14/2015 12:07:15
→ GoalBased: 你的classA對應talbeA 裡面有兩個字串欄位嗎? 07/14 12:20
→ GoalBased: 如果是的話,不理解你拆成兩個class的用意 07/14 12:21
→ GoalBased: 另外你文中雖然說想要一次就產生,那拆開不行嗎? 07/14 12:24
→ 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
推 Litfal: 你要做資料庫正規化...把時段抽出成一個獨立的Table 07/15 21:56