2013-04-04 6 views
12

Вот мой SQL запрос, как следоватьВыберите верхний 1 результат подзапроса в LINQ к 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 

И я стараюсь, чтобы преобразовать эту инструкцию SQL в LINQ, как следовать

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) 
      }; 

Но проблема ее подачи me imageName во вложенном списке, но я хочу, чтобы imageName как строка.

Я также проверяю, используя быстрые часы, и на следующем изображении вы можете увидеть, что imageName появляется во внутреннем списке.

here can be check quick watch result

ответ

31

Вместо Take(1) который возвращает последовательность IEnumerable<string>, использовать FirstOrDefault(), который возвращает одно значение строки (или нуль, если нет никаких результатов). Также не создать анонимный тип результата подзапроса:

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

BTW FirstOrDefault() генерирует TOP(1) SQL.

+0

все еще его показывает в виде столба сетки {image_name = f55c1573_a658_420e_9d33_2a8d997bbd51.jpg} вместо f55c1573_a658_420e_9d33_2a8d997bbd51.jpg. Я прямо дал этот результат источнику данных для gridview – rahularyansharma

+0

@rahularyansharma, пожалуйста, просмотрите небольшое обновление - это потому, что вы создали анонимный тип для результата подзапроса: 'new {soh.image_name}'. Вы должны просто вернуть строковое значение. –

+1

Спасибо! это работает ! – rahularyansharma

Смежные вопросы