次のような非常に単純なクエリがあります
select *
from job
where jobId like '%23%'
or title like '%23%'
動的Linqを使用してこれを複製できるようにする必要があります
一番近いのはこれですが、うまくいきません
.Where("@0.Contains(jobId) or title.Contains(@0)", "23");
誰かがこれに対する解決策を持っていますか?理想的には、整数と文字列の両方で同じようにしたいです
コメントに基づく補遺
エラーは:
タイプ 'System.Linq.Dynamic.ParseException'の例外がSystem.Linq.Dynamic.dllで発生しましたが、ユーザーコードでは処理されませんでした追加情報:タイプ 'String'に該当するメソッド 'Contains'が存在しません
jobId
フィールドはint
、 title
はvarchar
です。
あなたのクエリはほぼ正しいです:
.Where("@0.Contains(jobId.ToString()) or title.Contains(@0)", "23")
エンティティフレームワーク(使用していると思います)は、 jobId.ToString()
をCAST( [Extent1].[Id] AS nvarchar(max))
正しく変更します...次に、 LIKE
ではなくCHARINDEX
を使用しますが、これはそうではありません問題です。
SQL Serverの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%')