【发布时间】:2018-11-13 00:17:25
【问题描述】:
我正在尝试将此 sql 语句转换为 linq,需要一些帮助:
SELECT *
FROM userlocation ul
INNER JOIN wins_user w
ON ul.locationname = w.location
WHERE ul.locationname = 'Value'
OR ( NOT EXISTS(SELECT *
FROM mulitcustomeraccess
WHERE userid = 'Value') )
这是我的 Linq 代码(usr 是 WINS_USER 表):
billcodelist = String.Join(
",",
dc.USERLOCATIONs
.Where(f => f.LOCATIONNAME == usr.LOCATION ||
dc.MULITCUSTOMERACCESSes
.Where(d => d.USERID == usr.Name)
.Select(d => d.LOCATIONNAME)
.Contains(f.LOCATIONNAME))
.Select(f => f.BILLCODECUSTNUMLIST)
.ToArray());
我尝试将我的 linq 代码更新为此
billcodelist = String.Join(
",",
dc.USERLOCATIONs
.Where(f => f.LOCATIONNAME == usr.LOCATION ||
!dc.MULITCUSTOMERACCESSes
.Any(d => d.USERID == usr.Name)
.Select(d => d.LOCATIONNAME)
.Contains(f.LOCATIONNAME))
.Select(f => f.BILLCODECUSTNUMLIST)
.ToArray());
然后我收到以下错误:
'bool' 不包含 'Select' 的定义并且不可访问 扩展方法“选择”接受“布尔”类型的第一个参数 可以找到(您是否缺少 using 指令或程序集 参考?)错误。
我的问题是如何将该 SQL 转换为 linq,我做错了什么?
【问题讨论】:
-
仅供参考,您不需要
ToArray,因为String.Join的过载需要IEnumerable<T>。 -
.Any返回一个布尔值(true,如果有任何项目满足条件),但是您尝试在结果上调用.Select,这就是您收到该错误的原因。如果.Any应该是.Where子句的一部分,那么您需要在.Any后面加上另一个右括号。您也没有显示声明usr的位置。你不想像在 SQL 中那样加入你的 linq 吗?