SQL到LINQ转换C#

时间:2018-11-12 15:37:06

标签: c# sql linq

我正在尝试将此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,这是我做错了什么?

2 个答案:

答案 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的记录。