如何使用 Dapper 检查空值
How to check for null values with Dapper
我有一个 SQL table 个国家,有 CountryId 和 StateId。 StateId 可以为 null,因为并非所有国家/地区都有 States。
我想检查 country/state 的组合是否存在于 table 中。如果我在 table 中有国家“NL”和状态 NULL,并且我使用以下查询,其中 countryId =“NL”和 stateId = null:
return await conn.ExecuteScalarAsync<bool>(@"SELECT COUNT(*)
FROM [dbo].[Countries]
WHERE [CountryId] = @CountryId
AND [StateId] = @StateId",
new { countryId, stateId });
它会 return 错误。我期待一个真实的回应。有人可以解释这种行为吗?解决这个问题的最佳方法是什么?
这不是 Dapper 的问题。使用 = 运算符将任何内容与 NULL 进行比较将 usually return 为假。您将不得不使用“is null”进行比较,即
AND [StateId] is null
(至少在 SQL 服务器上)。这当然意味着如果 stateid 为空,您的查询将不得不看起来不同。
检查这个:
SELECT COUNT(*)
FROM [dbo].[Countries]
WHERE [CountryId] = @CountryId
AND ([StateId] IS NULL OR ([StateId] IS NOT NULL AND [StateId] = @StateId))
它将检查 StateId
是否为 null
,然后只有 'CountryId' 将检查那些没有国家的国家,如果 StateId
不是 [=12] =],那么 StateId
也会被检查
我有一个 SQL table 个国家,有 CountryId 和 StateId。 StateId 可以为 null,因为并非所有国家/地区都有 States。 我想检查 country/state 的组合是否存在于 table 中。如果我在 table 中有国家“NL”和状态 NULL,并且我使用以下查询,其中 countryId =“NL”和 stateId = null:
return await conn.ExecuteScalarAsync<bool>(@"SELECT COUNT(*)
FROM [dbo].[Countries]
WHERE [CountryId] = @CountryId
AND [StateId] = @StateId",
new { countryId, stateId });
它会 return 错误。我期待一个真实的回应。有人可以解释这种行为吗?解决这个问题的最佳方法是什么?
这不是 Dapper 的问题。使用 = 运算符将任何内容与 NULL 进行比较将 usually return 为假。您将不得不使用“is null”进行比较,即
AND [StateId] is null
(至少在 SQL 服务器上)。这当然意味着如果 stateid 为空,您的查询将不得不看起来不同。
检查这个:
SELECT COUNT(*)
FROM [dbo].[Countries]
WHERE [CountryId] = @CountryId
AND ([StateId] IS NULL OR ([StateId] IS NOT NULL AND [StateId] = @StateId))
它将检查 StateId
是否为 null
,然后只有 'CountryId' 将检查那些没有国家的国家,如果 StateId
不是 [=12] =],那么 StateId
也会被检查