さて、この振る舞いは私を本当に困惑させました。文字列フィールドに部分文字列が含まれているかどうかを確認するために Where 句を追加しようとしている IQueryable リストがあります。次のように検索文字列をハードコーディングすると:
sourceList = sourceList.Where(license => license.FileNumber.Contains("S0"))
これは期待どおりに機能し、Visual Studio デバッガーで sourceList を検査して内部クエリを生成します。
{SELECT [Extent1].[id] AS [id], [Extent1].[FileNumber] AS [FileNumber],
[Extent1].[LegalLocation] AS [LegalLocation]FROM [dbo].[Licenses]
AS [Extent1]WHERE [Extent1].[FileNumber] LIKE N'%S0%'}
次のような変数から検索値を設定すると、奇妙なことが起こります。
string testString = "S0";
sourceList = sourceList.Where(license => license.FileNumber.Contains(testString))
これにより、内部クエリが生成されます。
{SELECT [Extent1].[id] AS [id], [Extent1].[FileNumber] AS [FileNumber],
[Extent1].[LegalLocation] AS [LegalLocation]FROM [dbo].[Licenses]
AS [Extent1]WHERE [Extent1].[FileNumber] LIKE @p__linq__0 ESCAPE N'~'}
最後の LIKE 部分の違いに気付きましたか? 私は本当に混乱しています。どんな助けでも大歓迎です。これが本当にばかげたことであることを願っています。関連性がある場合、これは Entity Framework ソースからのデータをフィルター処理するためのものです。
ありがとう、ジェイソン