我正在尝试使用这个 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
当我的参数是字符串而不是可空值时它会产生。
我希望它会产生类似的东西
WHERE [Extent2].[CountryCode] = @p__linq__0 AND [Extent2].[Region] = @p__linq__1
我使用 LinqKit 谓词而不是表达式尝试了同样的事情,但得到了相同的结果。实际上,我有一个带有附加 where 子句的更复杂的查询,但是当它不起作用时,我将其分解为这个简单的查询,发现 where 子句与我的预期完全不同。
所以问题是产生一个类似于我使用 LinqKit 表达式或谓词的更简单的 where 子句的正确方法是什么?