สอบถามการคิวรี่ ค่าจากดาต้าเบสลง gridview โดยใช้ linq ครับ
ผมเจอปัญหาการคิวรีข้อมูลจากตาราง 3 ตารางที่เชื่อมกันอยู่ ตามรูปและโค้ดครับครับ
โค้ดคิวรี่ข้อมูลลง gridview
Code (C#)
var std = from stdq in db.student
from teacq in db.teacher
from comq in db.company
where (stdq.major_fk == nummaj && stdq.teacher_fk == teacq.t_id && stdq.company_fk == comq.comp_id) || (stdq.major_fk == nummaj && stdq.teacher_fk == null && stdq.company_fk == null)
select new
{
id = stdq.std_id,
pass = stdq.std_password,
sname = stdq.std_sname_th,
fname = stdq.std_fname_th,
lname = stdq.std_lname_th,
tid = stdq.teacher_fk,
tname = teacq.t_fname,
comid = stdq.company_fk,
comname = comq.comp_name
};
GridView1.DataSource = std.ToList();
GridView1.DataBind();
โค้ด rowdatabound ในส่วนของคอลัมน์อาจารย์กับสถานประกอบการ
Code (C#)
Label lblteacher = (Label)(e.Row.FindControl("lblteacher"));
if (lblteacher != null)
{
if (DataBinder.Eval(e.Row.DataItem, "tid") == null)
{
lblteacher.Text = "ยังไม่ได้เลือก";
}
else
{
lblteacher.Text = (string)DataBinder.Eval(e.Row.DataItem, "tname");
}
}
Label lblcompany = (Label)(e.Row.FindControl("lblcompany"));
if (lblcompany != null)
{
if (DataBinder.Eval(e.Row.DataItem, "comid") == null)
{
lblcompany.Text = "ยังไม่ได้เลือก";
}
else
{
lblcompany.Text = (string)DataBinder.Eval(e.Row.DataItem, "comname");
}
}
ผมมีข้อมูลนักเรียนอยู่คนเดียว ข้อมูลอาจารย์ 3 คน ข้อมูลสถานประกอบการ 2 ที่ นักเรียนยังไม่ได้เลือกอาจารย์และสถานประกอบการ พอคิวรี่ออกมาปรากฏว่ามันเป็นอย่างนี้ครับ
เหมือนมันจะออกมาตามจำนวนอาจารย์และสถานประกอบการเลย ซึ่งถ้าผมจะเอาเงื่อนไข หรือ ออกเหมือนจะไม่ได้เพราะค่า ฟอเร้นคีย์ในตารางนักศึกษา ที่เชื่อมไปยังตารางอาจารย์และสถานประกอบการมีค่าเป็น null ได้ ผมควรจะคิวรี่ยังไงครับ ให้มันตรงที่สุดTag : .NET, Web (ASP.NET), LINQ, C#
Date :
2014-03-08 19:41:01
By :
4k8bwop007
View :
1283
Reply :
3
อันนี้ใช้การ JOIN กันหรือเปล่าครับ
Code (LInq)
var ds = (from c in db.table1
join d in db.table2
on c.GroupID equals d.GroupID
where c.xxx == xxx && c.xxx == xx
select c)
Date :
2014-03-09 08:26:17
By :
mr.win
ทำได้แล้วครับ ใช้ join จริงๆด้วย ได้คำชี้แนะแล้วก็ไปหาศึกษาเพิ่ม ก็เห็นการใช้ left join right join ในเว็บนี้ แล้วไปศึกษาแบบ linq อีก เลยได้มาเป็นแบบนี้
Code (Linq)
var results = from data in userData
join growth in userGrowth
on data.User equals growth.User into joined
from j in joined.DefaultIfEmpty()
select new
{
UserData = data,
UserGrowth = j
};
หลุดเลยครับ ทำได้แล้วว ขอบคุณมากครับ ^^
Date :
2014-03-09 16:30:24
By :
4k8bwop007
Load balance : Server 01