我想在C#或VB.NET中採取所有建議。Linq to SQL中的聯合查詢來選擇所有記錄,即使外鍵列中有一些空字符
我有一個DB圖,如下圖所示。我還包括這裏的數據庫腳本@http://pastebin.com/pDC25Gkm
在學生表,CountryId和RoomId列允許空值。因爲有些記錄還沒有關於房間和國家的信息。 另外,有些學生沒有散文。
我正在與所有表進行聯合查詢。我想選擇所有學生到 項目結果是這樣的:
通緝查詢結果。
這裏是我當前的查詢給出結果如下圖:
Dim db As New DBDataContext
Dim query = From st In db.Students _
Join c In db.Countries On c.Id Equals st.Id _
Join r In db.Rooms On r.Id Equals st.RoomId _
Join b In db.Buildings On b.Id Equals r.BuildingId _
Join es In db.Essays On es.StudentId Equals st.Id _
Select st, c, r, b, es
'put query result into datatable
Dim dt = New DataTable("Result")
dt.Columns.Add("Id", GetType(Integer))
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Room", GetType(String))
dt.Columns.Add("Building", GetType(String))
dt.Columns.Add("Country", GetType(String))
dt.Columns.Add("Essay", GetType(String))
For Each q In query
dt.Rows.Add(New Object() {q.st.Id, q.st.FullName, q.r.RoomNumber, q.b.BuildingName, q.c.CountryName, q.es.Eassay})
Next
'bind to list view
lvStudent.DataSource = dt
lvStudent.DataBind()
當前查詢結果
我只有一個結果回因爲我有(2)威廉諾曼記錄在每張表中。但我沒有得到任何關於其他人的信息,比如(3)擁有除RoomId以外的一切的Sync Master。
我需要修改上面的查詢,所以它會給我所有的學生喜歡上面想要的查詢圖像?謝謝。
你試過在網上搜索linq`LFET JOIN`嗎?看看`.DefaultIfEmpty()`方法 – 2011-02-02 05:12:49