我想在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