この質問を追加する前に、stackoverflow で同様の質問を検索しましたが、見つかりませんでした。インターネット上の質問のほとんどは、文字列 (LIKE '%ABC%' など) で LIKE を使用していましたが、別のテーブルの既存の列と比較する必要があります。
以下のように、select ステートメントの linq クエリを記述する必要があります。
select *
from [dbo].[BaseClaim]
where WPId like (select WPId from UserProfiles where ID='1459')
以下のlinqクエリを思いつきましたが、期待どおりに機能しません-
var result = (from claimsRow in context.BaseClaims
where (from upRow in context.UserProfiles
where upRow.ID == 1459
select upRow.WPId).Contains(claimsRow.WPId)
select claimsRow);
上記のlinqが生成するSQLは次のとおりです-
SELECT
[Extent1].[WPId] AS [WPId]
FROM [dbo].[BaseClaim] AS [Extent1]
WHERE EXISTS (SELECT
1 AS [C1]
FROM (SELECT
[UserProfiles].[ID] AS [ID],
[UserProfiles].[WPId] AS [WPId]
FROM [dbo].[UserProfiles] AS [UserProfiles]) AS [Extent2]
WHERE (1459 = [Extent2].[ID]) AND ([Extent2].[WPId] = [Extent1].[WPId]))
したがって、baseclaim.wpID を LIKE ではなく userprofiles.wpid と比較しているため、私の linq が機能していないことは明らかです。