【发布时间】:2021-09-29 07:40:08
【问题描述】:
我有这个 LINQ Where 子句在 SQL 查询中声明 2 个变量
var parkingLotPrice =
_context.ParkingLotPrice
.Where(x => currentDate >= x.EffectiveDate && (currentDate <= x.ExpiryDate || x.ExpiryDate == null))
.ToQueryString();
它会生成这个 SQL 查询:
DECLARE @__currentDate_0 datetime2 = '2021-07-21T17:48:29.1106534-06:00';
DECLARE @__currentDate_1 datetime2 = '2021-07-21T17:48:29.1106534-06:00';
SELECT [p].[ParkingLotId],
[p].[PriceScheduleId],
[p].[EffectiveDate],
[p].[ExpiryDate]
FROM [ParkingLotPrice] AS [p]
WHERE (@__currentDate_0 >= [p].[EffectiveDate]) AND ((@__currentDate_1 <= [p].[ExpiryDate]) OR [p].[ExpiryDate] IS NULL)
注意:声明包含相同的值。
问题是(currentDate <= x.ExpiryDate || x.ExpiryDate == null)。
如果我删除 null 评估,它只会声明 1 个变量。
DECLARE @__currentDate_0 datetime2 = '2021-07-21T17:32:31.3980763-06:00';
SELECT [p].[ParkingLotId],
[p].[PriceScheduleId],
[p].[EffectiveDate],
[p].[ExpiryDate]
FROM [ParkingLotPrice] AS [p]
WHERE (@__currentDate_0 >= [p].[EffectiveDate]) AND (@__currentDate_0 <= [p].[ExpiryDate])
有没有办法保持 Where 评估,但只声明 1 个变量?
【问题讨论】:
-
第二条sql在哪里生成?你也可以发一下吗?
-
添加了没有 null 评估 @Serge 的 SQL 查询
-
这有什么问题?它会返回错误的结果吗?我创建了数百个带空和不带空的查询,它们总是返回正确的结果。
-
你能帮我个忙吗?只是因为好奇,您可以通过像这样交换( x.ExpiryDate == null || (currentDate
-
感谢@Serge,查询仍然声明了 2 次span>
标签: c# sql-server linq .net-core entity-framework-core