下面是我的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)
};
但问题是在嵌套列表中给我 imageName
但我希望 imageName
只是一个字符串。
我还使用快速观察进行检查,在下图中您可以看到 imageName
出现在内部列表中。
最佳答案
而不是 Take(1)
返回序列 IEnumerable<string>
, 使用 FirstOrDefault()
它返回单个字符串值(如果没有结果则返回 null)。也不要为子查询结果创建匿名类型:
imageName = (from soh in db.tblProductImages
where soh.product_id == e.ProductId
select soh.image_name).FirstOrDefault()
顺便说一句 FirstOrDefault()
生成 TOP(1)
SQL。
关于c# - 从 linq to sql 中的子查询中选择前 1 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15810699/