【问题标题】:Unable to convert SQL query to linq query which contains subquery and need to handle two tables无法将 SQL 查询转换为包含子查询且需要处理两个表的 linq 查询
【发布时间】:2018-11-07 22:36:46
【问题描述】:

我们正在将 SQL 查询转换为 linq 查询,此转换涉及如下两个表:

select * 
from Tbl_Vulpith_Registration 
where Profile_Pic is not null 
  and MemId IN (select MemId from Tbl_List_Services)

Tbl_Vulpith_RegistrationTbl_List_Services 是涉及的两个表。

memId 是两个表中的公共列。

这就是我们尝试将上述 SQL 查询转换为 linq 的内容:

  var reglist = objentity.Tbl_Vulpith_Registration.Select(a => a).Where(a => a.Profile_Pic != null);
    var listmemsmemIds = objentity.Tbl_List_Services.Select(b => b.MemId).ToList();

    var finalist = reglist.Select(b => b).Where(c => c.MemId.Contains(listmemsmemIds));

【问题讨论】:

    标签: c# sql linq subquery sql-to-linq-conversion


    【解决方案1】:
    (from r in Tbl_Vulpith_Registration.Where(r => r.Profile_Pic != null)
    from s in Tbl_List_Services.Where(s => s.MemId == r.MemId)
    select r).ToList();
    

    我相信您也可以使用这种方法,在公共 MemId 列中加入这些表。

    【讨论】:

      【解决方案2】:

      我猜MemId是数字类型,如果是这样,那么你使用Contains是错误的,将你最后的语句更正为:

      var finalist = reglist.Select(b => b).Where(c => listmemsmemIds.Contains(c.MemId));
      

      或者更好的是,使用查询语法,它会在一个语句中得到你的结果:

      var finalist = (from a in objentity.Tbl_Vulpith_Registration
                       where a.Profile_Pic != null && (from b in objentity.Tbl_List_Services select b.MemId).Contains(a.MemId)
                       select a).ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多