Nano Hash - криптовалюты, майнинг, программирование

LIKE, OR и прочее в Linq

Я пытаюсь написать запрос linq-to-sql, используя || это ведет себя так же, как ИЛИ в SQL в сочетании с LIKE/Contains.

SQL:

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

Это приведет к тому, что все с именем, например «Боб Смит», а также все с номером группы, точно равным A123456. В моей базе данных пример sql дает мне три результата (желаемый результат):

A123456   John Davis
A312345   Bob Smith
A123456   Matt Jones

Linq: (при условии, что PNum = A123456; первый = "Боб", последний = "Смит")

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.Contains() и a.StartsWith(), но с каждой версией я получаю одни и те же два результата. Когда я удаляю любые Like/Contain/StartsWith, я получаю желаемый результат, но мне нужно подстановочный знак. Как получить все три результата в запросе Linq?


Ответы:


1

Я бы определенно использовал 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? Просто установите журнал контекста, чтобы записать его в консоль или что-то еще проще. (Я бы написал консольное приложение только для того, чтобы проверить эту проблему — это будет проще, чем каждый раз запускать пользовательский интерфейс.)

20.07.2010

2

Ваш запрос мне кажется правильным.

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

20.07.2010
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..