ЛЮБИТ и ORs и материал в Linq

Я пытаюсь записать linq к запросу SQL, использующий ||, который ведет себя тот же путь как ИЛИ в SQL в сочетании с ЛЮБЛЕНИЕМ/СОДЕРЖАНИЕМ.

SQL:

SELECT * FROM Users
WHERE GroupNumber = 'A123456'
OR (FirstName LIKE 'Bob%' AND LastName LIKE 'Smith%')

Это приведет ко всем с именем как "Bob Smith", а также все с GroupNumber точно равняются A123456. В моей базе данных sql пример дает мне три результата (Желаемый результат):

A123456   John Davis
A312345   Bob Smith
A123456   Matt Jones

Linq: (если PNum = A123456; сначала = "Bob"; в последний раз = "Smith")

var users = from a in dc.Users
        where a.PolicyNumber == PNum || (SqlMethods.Like(a.FirstName, first + "%") && SqlMethods.Like(a.LastName, last + "%"))
        orderby a.PolicyNumber, a.FirstName
        select a;

Это только даст мне результаты на левой стороне ||:

A123456   John Davis
A123456   Matt Jones

Я также попробовал a. Содержит () и a. StartsWith (), но с каждой версией я получаю те же два результата. Когда я удаляю любой Like/Contain/StartsWith, я получаю желаемый результат, но мне нужно к подстановочному знаку. Как я получаю все три результата в запросе Linq?

7
задан pirho 26 February 2018 в 13:20
поделиться

2 ответа

Я бы определенно использовал StartsWith в этом случае, просто чтобы сделать код более похожим на C # при чтении - но это должно работать:

var users = from a in dc.Users
        where a.PolicyNumber == PNum 
              || (a.FirstName.StartsWith(first) && a.LastName.StartsWith(last))
        orderby a.PolicyNumber, a.FirstName
        select a;

Если это запрос не работает, не могли бы вы опубликовать сгенерированный им SQL? Просто установите журнал контекста, чтобы он записывал его в консоль, или что-то еще проще. (Я бы написал консольное приложение только для проверки этой проблемы - это будет проще, чем запускать пользовательский интерфейс каждый раз.)

2
ответ дан 7 December 2019 в 18:39
поделиться

Ваш запрос выглядит корректно.

Пробовали ли вы посмотреть в лог, чтобы увидеть, какой SQL выдается?

0
ответ дан 7 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: