动态 Linq OR 与 int 和字符串
Dynamic Linq OR with int and string
我有一个非常简单的查询,看起来像这样
select *
from job
where jobId like '%23%'
or title like '%23%'
我需要能够使用动态 Linq 复制它
我最接近的是这个,但它不起作用
.Where("@0.Contains(jobId) or title.Contains(@0)", "23");
有没有人对此有解决方案,理想情况下我希望它对 int 和字符串都做类似的事情
基于评论的附录
错误是:
An exception of type 'System.Linq.Dynamic.ParseException' occurred in System.Linq.Dynamic.dll but was not handled in user code Additional information: No applicable method 'Contains' exists in type 'String'
jobId
字段是一个 int
,而 title
是一个 varchar
。
您的查询基本正确:
.Where("@0.Contains(jobId.ToString()) or title.Contains(@0)", "23")
Entity Framework(我希望你正在使用它)正确地将 jobId.ToString()
更改为 CAST( [Extent1].[Id] AS nvarchar(max))
... 然后它使用 CHARINDEX
而不是 LIKE
, 但这不是问题。
我在 SQL 服务器上使用 Entity Framework 6.1.3 得到的查询是:
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%')
我有一个非常简单的查询,看起来像这样
select *
from job
where jobId like '%23%'
or title like '%23%'
我需要能够使用动态 Linq 复制它
我最接近的是这个,但它不起作用
.Where("@0.Contains(jobId) or title.Contains(@0)", "23");
有没有人对此有解决方案,理想情况下我希望它对 int 和字符串都做类似的事情
基于评论的附录
错误是:
An exception of type 'System.Linq.Dynamic.ParseException' occurred in System.Linq.Dynamic.dll but was not handled in user code Additional information: No applicable method 'Contains' exists in type 'String'
jobId
字段是一个 int
,而 title
是一个 varchar
。
您的查询基本正确:
.Where("@0.Contains(jobId.ToString()) or title.Contains(@0)", "23")
Entity Framework(我希望你正在使用它)正确地将 jobId.ToString()
更改为 CAST( [Extent1].[Id] AS nvarchar(max))
... 然后它使用 CHARINDEX
而不是 LIKE
, 但这不是问题。
我在 SQL 服务器上使用 Entity Framework 6.1.3 得到的查询是:
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%')