Kteam Q&A Community

Cộng đồng hỏi đáp về các vấn đề trong lập trình, công nghệ thông tin.

1

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 :  Cơ sở dữ liệu minh họa

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 

1 câu trả lời Thêm câu trả lời

0
K9 đã trả lời 2018-05-14 13:39:27

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ự

K2m58 đã bình luận 2018-05-14 14:35:25

"khi x.Table => nó ra 1 TQuery => ra danh sách "

Có lẽ web đã che khuất đi 1 phần code của e ở trên . đây là phần mà e với mong muốn lấy được cái COMPANY_ID để so sánh

x.EMPLOYEEs.Where(z => z.USERNAME == userName).SingleOrDefault().COMPANY_ID);

  khi e sử dụng x.Table => nó ra danh sách  và e có sử dụng .COMPANY_ID để lấy ra COMPANY_ID  => nó không phải là một danh sách nữa , e nghĩ như vậy :D  

Tại vì e thấy ở x . nó có thể gọi đến bảng EMPLOYEE nên e làm thử để biết thêm ạ .cảm ơn a đã phản hồi

0 bình chọn

Câu trả lời của bạn

Bạn có thể trả lời câu hỏi này? Hãy chia sẻ nó cho mọi người.

Hủy bỏ hoặc

Chiến dịch

Kteam - Howkteam Free Education