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

2

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

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

  • 0
    К вашему сведению, вам не нужен ToArray как существует перегрузка String.Join которая принимает IEnumerable<T> .
  • 0
    .Any возвращает bool ( true если какие-либо элементы удовлетворяют условию), но затем вы пытаетесь вызвать. .Select результат, вот почему вы получаете эту ошибку. Если предполагается, что .Any является частью предложения .Where , то после .Any вам нужна еще одна закрывающая скобка. Вы также не показываете, где объявлен usr . Разве вам не нужно объединение в linq, как в SQL?
Теги:
linq

2 ответа

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.}
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" не возвращает логическое значение, а скорее IQueryable. Выше я использовал Any чтобы оценить, есть ли в MULITCUSTOMERACCESS запись, где вы использовали Where.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню