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