Преобразование SQL в LINQ C # - PullRequest
       2

Преобразование SQL в LINQ C #

0 голосов
/ 12 ноября 2018

Я пытаюсь преобразовать этот 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 is WINS_USER table):

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» и не доступно метод расширения «Выбрать», принимающий первый аргумент типа «bool» может быть найдено (вы пропустили директиву использования или сборку ссылка?) ошибка.

У меня вопрос, как мне преобразовать этот SQL в linq, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вот еще одна альтернатива

 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.}
0 голосов
/ 12 ноября 2018
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);

Там, где предложения всегда ожидают логических выражений, вы передаете «где» в «где», но «где» не возвращает логическое значение, а скорее IQueryable. Выше я использовал Any, чтобы оценить, есть ли у MULITCUSTOMERACCESS запись, в которой вы использовали Where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...