2013-04-04 28 views
12

Đây là truy vấn sql của tôi như sauChọn top 1 kết quả từ subquery trong LINQ to SQL

select enq_Id,enq_FromName, 
     enq_EmailId, 
     enq_Phone, 
     enq_Subject, 
     enq_Message, 
     enq_EnquiryBy, 
     enq_Mode, 
     enq_Date, 
     ProductId, 
     (select top 1 image_name 
     from tblProductImage as i 
     where i.product_id=p.product_Id) as imageName, 
     p.product_Name, 
     p.product_code  
from tblEnquiry as e 
inner join tblProduct as p ON e.ProductId=p.product_Id 
where ProductId is not null 

Và tôi cố gắng để chuyển đổi câu lệnh SQL này vào LINQ như sau

var result = from e in db.tblEnquiries 
      join d in db.tblProducts 
        on e.ProductId equals d.product_Id      
      where e.ProductId != null 
      orderby e.enq_Date descending 
      select new { 
       e.enq_Id, 
       e.enq_FromName, 
       e.enq_EmailId, 
       e.enq_Phone, 
       e.enq_Subject, 
       e.enq_Message, 
       e.enq_EnquiryBy, 
       e.enq_Mode, 
       e.enq_Date, 
       d.product_Id, 
       d.product_Name, 
       imageName = (from soh in db.tblProductImages 
          where soh.product_id == e.ProductId 
          select new { soh.image_name }).Take(1) 
      }; 

Nhưng vấn đề hiến của mình tôi imageName trong danh sách lồng nhau nhưng tôi muốn rằng imageName giống như một chuỗi.

Tôi cũng kiểm tra bằng cách sử dụng đồng hồ nhanh và trong hình ảnh sau đây bạn có thể thấy rằng imageName xuất hiện trong danh sách bên trong.

here can be check quick watch result

Trả lời

31

Thay vì Take(1) trả về chuỗi IEnumerable<string>, sử dụng FirstOrDefault() trả về chuỗi giá trị duy nhất (hoặc null nếu không có kết quả). Cũng không tạo ra loại vô danh cho kết quả subquery:

imageName = (from soh in db.tblProductImages 
      where soh.product_id == e.ProductId 
      select soh.image_name).FirstOrDefault() 

BTW FirstOrDefault() tạo TOP(1) SQL.

+0

vẫn hiển thị trong cột chế độ xem lưới {image_name = f55c1573_a658_420e_9d33_2a8d997bbd51.jpg} thay vì f55c1573_a658_420e_9d33_2a8d997bbd51.jpg. Tôi trực tiếp đưa ra kết quả đó cho nguồn dữ liệu để xem lưới – rahularyansharma

+0

@rahularyansharma, vui lòng xem bản cập nhật nhỏ - đó là vì bạn đã tạo loại ẩn danh cho kết quả truy vấn con: 'new {soh.image_name}'. Bạn chỉ cần trả về giá trị chuỗi. –

+1

Cảm ơn! các công trình của nó! – rahularyansharma