下面是我用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
采纳后会给大神会追加悬赏。
首先感谢您给出的方案,我有些疑问,在第二步里的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模糊查询来查出刚才查出的数据不就得了!
追问嗯,也对,我先去试试,看效果如何,如有不明白的地方在请教你哈。
追答恩,行!