[問題] Entity Framework是否能產生巢狀物件

看板C_Sharp作者 (還在想)時間9年前 (2015/07/14 11:53), 9年前編輯推噓1(104)
留言5則, 2人參與, 最新討論串1/2 (看更多)
假設兩個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

07/14 12:20, , 1F
你的classA對應talbeA 裡面有兩個字串欄位嗎?
07/14 12:20, 1F

07/14 12:21, , 2F
如果是的話,不理解你拆成兩個class的用意
07/14 12:21, 2F

07/14 12:24, , 3F
另外你文中雖然說想要一次就產生,那拆開不行嗎?
07/14 12:24, 3F

07/14 12:25, , 4F
先把table1資料撈出來,自己組合classA這樣
07/14 12:25, 4F
老實說那欄位存的是時段 位置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

07/15 21:56, , 5F
你要做資料庫正規化...把時段抽出成一個獨立的Table
07/15 21:56, 5F
文章代碼(AID): #1Lf8VFT1 (C_Sharp)
文章代碼(AID): #1Lf8VFT1 (C_Sharp)