无法将SQL查询转换为包含子查询并需要处理两个表的linq查询

时间:2018-05-29 10:00:52

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

我们正在将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));

2 个答案:

答案 0 :(得分:0)

我猜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();

答案 1 :(得分:0)

(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列上加入这些表。