このLinq式を使用しようとしています
Dim ex2 As Expression(Of Func(Of Advertisement, Boolean)) =
Function(a) a.Address.CountryCode = ISO AndAlso a.Address.Region = EmptyString
このように
Dim ltest = (From a In db.Advertisements.AsExpandable().Where(ex2)).ToList
しかし、それはこれらのクレイジーな場所の条件を生み出します
DECLARE @p__linq__0 NVARCHAR (MAX) = N'US';
DECLARE @p__linq__1 NVARCHAR (MAX) = N'';
SELECT [Extent1].[AdvertisementID] AS [AdvertisementID],
[Extent1].[URL] AS [URL],
[Extent1].[Address_AddressID] AS [Address_AddressID],
[Extent1].[Business_BusinessID] AS [Business_BusinessID]
FROM [dbo].[Advertisements] AS [Extent1]
LEFT OUTER JOIN [dbo].[Addresses] AS [Extent2]
ON [Extent1].[Address_AddressID] = [Extent2].[AddressID]
WHERE (([Extent2].[CountryCode] = @p__linq__0)
OR (([Extent2].[CountryCode] IS NULL)
AND (@p__linq__0 IS NULL)))
AND (([Extent2].[Region] = @p__linq__1)
OR (([Extent2].[Region] IS NULL)
AND (@p__linq__1 IS NULL)))
@p__linq__1 IS NULL
パラメータが文字列でnullableではない場合、なぜそれが生成されるのかわかりません。
私はそれが次のようなものを生み出すことを期待しています
WHERE [Extent2].[CountryCode] = @p__linq__0 AND [Extent2].[Region] = @p__linq__1
式の代わりに LinqKit 述語を使用して同じことを試みましたが、同じ結果が得られました。私は実際には where 句を追加したもっと複雑なクエリを持っていますが、それがうまくいかなかったときに、この単純なクエリだけに分解したところ、where 句が意図したものとはまったく異なることがわかりました。
問題は、LinqKit 式または述語を使用して意図したものに似た、より単純な where 句を生成する適切な方法は何ですか?