我想從SQL Server數據庫中獲取數據。如何在實體框架中使用連接使級別的輸出Json對象 - 不是相同的級別
數據庫有3個表如下所示:
中的表之間的相互關係用初級和外鍵:
- HALAQATI_View_GetAllMosques(父)
- HALAQATI_View_GetAllRings(兒童)
- HALAQATI_View_GetAllStudents(Child Of Child)
代碼:
var result = (from m in db.HALAQATI_VIEW_GetAllMosques
join r in db.HALAQATI_VIEW_GetAllRings on m.MSQ_ID equals r.MSQ_ID
join s in db.HALAQATI_VIEW_GetAllStudents on r.Ring_ID equals s.Ring_ID
where m.Emp_ID == r.Emp_ID && m.Emp_ID == id
select new { MsqID = m.MSQ_ID, MsqName = m.MSQ_Name, Rings = r,Students = s}).Distinct();
return new { Mosques = result };
輸出出現這樣的
{
"Mosques": [
{
"MsqID": 186,
"MsqName": "UNIVERSITY 1",
"Rings": {
"Ring_ID": 3730,
"Ring_Name": "Class 1",
"MSQ_ID": 186,
"Emp_ID": 3750
},
"Students": {
"Student_ID": 80065,
"Student_Name": "Student 1",
"Ring_ID": 3730
}
}
]
}
的問題是,Rings
而Students
出現在JSON同一水平,這是錯誤的。
students
必須低於Rings
。
預期的結果一定是這樣的:
{
"Mosques": [
{
"MsqID": 186,
"MsqName": "UNIVERSITY 1",
"Rings": [
{
"Ring_ID": 3730,
"Ring_Name": "Class 1",
"MSQ_ID": 186,
"Emp_ID": 3750,
"Students": [
{
"Student_ID": 80065,
"Student_Name": "Student 1",
"Ring_ID": 3730
}
]
}
]
}
]
}
'選擇新{=將對msqid m.MSQ_ID,MsqName = m.MSQ_Name,戒指= R,學生= S})'除非戒指有一個學生的財產,你都明確地在同一水平環宣佈它,而不是作爲戒指的一個子對象。看起來你需要在你的LINQ中的某處進行內部選擇。 –
@RonBeyer確切地說,這就是我想要的,我嘗試了很多,但沒有任何作品能夠告訴我們現在。你有解決方案嗎? – Loai
也許這會幫助嗎? http://stackoverflow.com/questions/17841108/linq-select-within-a-select嘗試搜索「linq內部選擇」並閱讀一些答案,似乎有很多方法來做到這一點,而沒有像你的設置,我不能推薦一個好的方法來做到這一點。 –