【发布时间】:2011-02-02 05:06:14
【问题描述】:
我愿意接受 C# 或 VB.NET 中的所有建议。
我有一个如下图所示的数据库图。我这里也包括数据库脚本@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) William NoMan 记录。但我对其他人一无所知,例如 (3) Sync Master,他拥有除 RoomId 之外的所有内容。
我需要什么来修改上面的查询,这样它就会给我所有的学生,就像上面想要的查询图片一样?谢谢。
【问题讨论】:
-
您是否尝试过在网上搜索 linq
LFET JOIN?查看.DefaultIfEmpty()方法 -
我现在就试试。谢谢。
标签: c# sql-server vb.net linq-to-sql join