带有int和string的动态Linq OR

本文关键字:动态 Linq OR string int 带有 | 更新日期: 2023-09-27 17:50:07

我有一个非常简单的查询,看起来像这样

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"的异常。在System.Linq.Dynamic.dll中发生了ParseException,但没有在用户代码中处理。附加信息:在类型'String'中不存在适用的方法'Contains'

jobId字段为int, title字段为varchar

带有int和string的动态Linq OR

你的查询基本正确:

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

实体框架(我希望你正在使用它)正确地改变jobId.ToString()CAST( [Extent1].[Id] AS nvarchar(max))…然后它使用CHARINDEX而不是LIKE,但这不是问题。

查询我得到,与实体框架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%')