【问题标题】:linq query showing long doesnot contains definition for Contains while converting sql query to linq将 sql 查询转换为 linq 时显示 long 的 linq 查询不包含 Contains 的定义
【发布时间】:2018-05-29 07:54:04
【问题描述】:

朋友们,我们正在将sql查询转换为linq查询,这个转换涉及如下两个表

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

这里的 Tbl_Vulpith_Registration 和 Tbl_List_Services 都是表

memId 是两个表中的公共列。

按照我们尝试将上述 sql 查询转换为 linq 的方法

var reglist=  objentity.Tbl_Vulpith_Registration.Select(a => a).Where(a => a.Profile_Pic != null);
// var res= reglist.Where(a=>a.Tbl_List_Services)

var listmemsmemIds = objentity.Tbl_List_Services.Select(b => b.MemId).ToList();

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

我们尝试了多种转换方式,但都没有成功。

【问题讨论】:

  • 使用Join,只会形成查询并从数据库中获取。当前代码(当它工作时)形成两个查询来获取所需的数据。
  • 我已经发布了一个使用 Join 的解决方案,检查一下。

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


【解决方案1】:

你需要做完全相反的事情:

.Where(c => listmemsmemIds.Contains(c.MemId))

【讨论】:

  • 嗨@Peter,感谢您的回复.. 仍然无法正常工作,您能否详细说明整个查询,请您重写。
  • 我忘记以c =>开头的表达式,添加它,请重新检查
【解决方案2】:

使用下面的代码连接两个表并获取输出(在内部,它将只创建一个查询)

var reglist = objentity.Tbl_Vulpith_Registration.Join(objentity.Tbl_List_Services, 
     o => o.MemId, i => i.MemId, (o, i) => o).Where(o => o.Profile_Pic  != null).ToList()

以上代码根据匹配MemId关联表,并返回实体类型为Tbl_Vulpith_Registration的对象。

如果您想了解 Join 方法,请查看 this 链接。

【讨论】:

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