我正在尝试将此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,这是我做错了什么?
答案 0 :(得分:1)
这是另一种选择
var result = from ul in UserLocation
join winUser in Wins_User on ul.locationName equals winUser.Location
where ul.locationName == 'value'
|| !MultiCustomerAccess.Any(x=> x.userId == "value")
select new { // your projections.}
答案 1 :(得分:0)
var results = USERLOCATION.Join(db.WINS_USER, w => w.LOCATION, ul => ul.locationname, (w, ul) => new {w, ul})
.Where(_ => _.ul.LOCATIONNAME == 'Value' || !db.MULITCUSTOMERACCESS.Any(m => m.USERID == 'Value'))
.Select(_ => _.ul.BILLCODECUSTNUMLIST);
var billCodeList = string.Join(",", results);
where子句始终期望布尔表达式,您将where传递到where,但是where不返回布尔值而是IQueryable。在上面的代码中,我使用了Any
来评估MULITCUSTOMERACCESS
是否具有您使用过Where
的记录。