c# - 从 linq to sql 中的子查询中选择前 1 个结果

标签 c# linq linq-to-sql

下面是我的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 出现在内部列表中。

here can be check quick watch result

最佳答案

而不是 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/

相关文章:

c# - 如何在另一种类型的列表列表中选择所有不同的字符串?

c# - 命名空间 "MvxWindowsPage"中不存在名称 "using:Cirrious.MvvmCross.WindowsUWP.Views"

c# - 从视频 C# 中提取帧

c# - 当 [OperationContract] 方法中使用多个参数时,WCF 服务代理抛出异常

c#如果键存在于字典中仍然添加字典中的值

sql-server - LINQ(到 Oracle)- Row_Number() Over Partition By

c# - 如何获取存储过程返回的两个表

c# - 如何通过查找器界面在 Entity Framework 4 中查找实体? (适用于 Linq To Sql)

c# - SQL Server : Event does not reference any tables (Tuning Advisor warning)

c# - 服务定位器模式下的单元测试