Динамический Linq ИЛИ с int и строкой

У меня очень простой запрос, который будет выглядеть так

select      *
from        job
where       jobId like '%23%'
or title    like '%23%'

Мне нужно иметь возможность воспроизвести это с помощью динамического Linq

Самое близкое, к чему я пришел, это, но это не работает

.Where("@0.Contains(jobId) or title.Contains(@0)", "23");

У кого-нибудь есть решение этой проблемы, в идеале я хотел бы, чтобы это делалось как для int, так и для строк

приложение на основе комментариев

Ошибка:

Исключение типа "System.Linq.Dynamic.ParseException" произошло в System.Linq.Dynamic.dll, но не было обработано в коде пользователя. Дополнительная информация: в типе "String" не существует применимого метода "Contains".

jobId поле является int, в то время как title это varchar,

1 ответ

Решение

Ваш запрос почти прав:

.Where("@0.Contains(jobId.ToString()) or title.Contains(@0)", "23")

Entity Framework (надеюсь, вы используете его) корректно меняется jobId.ToString() в CAST( [Extent1].[Id] AS nvarchar(max))... Затем он использует CHARINDEX вместо LIKE, но это не проблема.

Я получаю запрос с Entity Framework 6.1.3 на SQL Server:

SELECT 
    [Extent1].[jobId] AS [jobId], 
    [Extent1].[title] AS [title]
    FROM [dbo].[job] AS [Extent1]
    WHERE (( CAST(CHARINDEX( CAST( [Extent1].[jobId] AS nvarchar(max)), N'23') AS int)) > 0) OR ([Extent1].[title] LIKE N'%23%')
Другие вопросы по тегам