Динамический 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%')