Sql语句转换成Linq的方式

下面是我用SQL语句写的查询语句,麻烦哪位大神能给用Linq的方式重写下。

SELECT a.SoftwareCode,a.SoftwareName,a.SoftwareType,COUNT(b.DeviceCode) AS DeviceCount
FROM dbo.MDM_Manager_StrategyAPPs AS a
LEFT JOIN dbo.Mobile_DeviceDetail as b
ON b.AppList LIKE '%'+a.SoftwareCode+'%'
WHERE a.StrategyID = 'StrategyID' AND a.IsAllowed = 0
GROUP BY a.SoftwareCode,a.SoftwareName,a.SoftwareType

采纳后会给大神会追加悬赏。

(1)查出表dbo.MDM_Manager_StrategyAPPs所有数据的集合作为list_a,
dbo.Mobile_DeviceDetail表的集合list_b
(2)var list_c= list_a.where(list_b.Contains(list_a.ForEach(a=>a.SoftwareCode)))
if(list_c!=null){
list_c.where(a=>a.StrategyID=="StrategyID"&&a.IsAllowed==0).groupby(a=>a.SoftwareCode&&a.SoftwareName&&a.SoftwareType).select(new {SoftwareCode=a.SoftwareCode,SoftwareName=a.SoftwareName,SoftwareType=a.SoftwareType}).tolist();
//如上中DeviceCode即为list_c.count();
}
(3)list_c即为所查询结果,上述为所写,未经测试,不知是否有错,可以一测!追问

首先感谢您给出的方案,我有些疑问,在第二步里的list_b.Contains的参数不应该是string类型的么,而ForEach这个方法是没有返回值的啊。这样会是报错的啊。您看是否可以换成其他办法呢?我这的问题主要是困在了 (ON b.AppList LIKE '%'+a.SoftwareCode+'%') 这块,需要模糊匹配,很是伤脑筋啊。

追答

啊,对说的有道理,那个是没返回值的,你非的用linq吗,主要是就是你所说的两表联合的中的模糊查询,你为什么要联合了你分开查询,这一步查询估计是比较困难的

追问

因为 AppList 里面存放的是个字符串,也就是说可以包含多个 SoftwareCode ,无法确定唯一性,所以on后面就跟的模糊匹配。因为我们项目的整体架构用的是Linq 和 EF的方式,所以必须要换成这两种方式的一种,不允许直接拼写sql,所以我才很头大啊。

追答

不是你这样,你先不用那个表dbo.Mobile_DeviceDetail啊,你又没用到两个表有相等的id,你只是查出表dbo.Mobile_DeviceDetail中有没有dbo.MDM_Manager_StrategyAPPs中符合的数据,你就先不用表dbo.Mobile_DeviceDetail,查出其他满足条件的,再利用表dbo.Mobile_DeviceDetail模糊查询来查出刚才查出的数据不就得了!

追问

嗯,也对,我先去试试,看效果如何,如有不明白的地方在请教你哈。

追答

恩,行!

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答