Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
Truy Vấn Dữ Liệu với LINQ bằng Lambda Expression
Mọi người cho em hỏi . em có csdl như ảnh sau :
với mong muốn select xuống csdl để lấy bảng COMPANY sao cho COMPANY.ID bằng iID được truyền xuống và ID = COMPANY_ID của EMLOYEE có USERNAME = userName được truyền xuống
câu lệnh SQL được ghi ra như sau :
SELECT
CO.*
FROM
COMPANY CO
WHERE
CO.ID = '5'
AND CO.ID <> (SELECT COMPANY_ID
FROM dbo.EMPLOYEE
WHERE USERNAME = 'ADMIN')
Mình đã tìm ra giải pháp để thực hiện câu lệnh SQL trên . Tuy nhiên mình vẫn thắc mắc
Với câu lệnh này :
var obj = db.COMPANies.SingleOrDefault(x => x.ID == iID && x.ID != x.EMPLOYEEs.Where(z => z.USERNAME == userName).SingleOrDefault().COMPANY_ID);
tất nhiên là với câu lệnh này nó không ra kết quả mong đợi . điều mình thắc mắc là tại sao x ở trong câu lệnh sau
db.COMPANies.SingeOrDefault (x => <Ở trong này x có thể . đến EMPLOYEE>)
có thể gọi như thế này
x.EMPLOYEEs.Where(....)
Nhưng nó lại không ra kết quả mong đợi . mặc dù thấy nó rất ư là logic
bạn đang k hiểu bản chất LinQ thật
khi x.Table => nó ra 1 TQuery => ra danh sách
Trong câu truy vấn bạn không nên viết thêm 1 câu truy vấn khác. Vì trong phạm vi LinQ nó ứ chịu mấy xử lý phức tạp. Nên bạn cố gắn tách nó ra thành nhiều câu đơn giản và truy vấn tuần tự