Entity Framework 区分大小写的查询
Entity Framework Case Sensitive Query
我有一个名为 Post
的 table,其中有一列名为 key
:
Id | Key | Title
--------------------
1 | WM | First
--------------------
2 | wm | Second
如您所见,Post
的第一个 key
值是 WM
(大写),第二个 key
值是 wm
(小写) ).
当我使用以下代码执行查询时:
var post = await _posts.Where(o => o.Key == key).Select(o => new
{
id = o.Id,
title = o.Title
}).SingleOrDefaultAsync();
我用一个值(wm 和 WM)传递了 key
,但得到了一个结果。第二个(wm).
我搜索了解决方案并找到了这个 question
还有这个 answer。在我尝试使用答案并在搜索 wm
时实现 [CaseSensitive]
数据注释后,我返回第一个 post,当我搜索 WM
时,我得到 null
.
我怎样才能解决这个问题并获得足够的 post 密钥?
更新:
已生成 SQL 查询:
SELECT [Limit1].[C1] AS [C1],
[Limit1].[Id] AS [Id],
[Limit1].[Title] AS [Title]
FROM (SELECT TOP (2) [Extent1].[Id] AS [Id],
[Extent1].[Title] AS [Title],
1 AS [C1]
FROM [dbo].[Posts] AS [Extent1]
WHERE ([Extent1].[Key] = 'wm' /* @p__linq__0 */)
OR (([Extent1].[Key] IS NULL)
AND ('wm' /* @p__linq__0 */ IS NULL))) AS [Limit1]
我用同样的改变解决了这个问题:
将 Key
数据类型更改为 varchar
并执行 SQL 查询 SqlQuery<T>
:
var post = await _uow.Database
.SqlQuery<PostUrlDto>(
"SELECT Id , Title FROM Posts WHERE [Key] = @postkey COLLATE SQL_Latin1_General_CP1_CS_AS",
new SqlParameter("postkey", postkey)).SingleOrDefaultAsync()
我有一个名为 Post
的 table,其中有一列名为 key
:
Id | Key | Title
--------------------
1 | WM | First
--------------------
2 | wm | Second
如您所见,Post
的第一个 key
值是 WM
(大写),第二个 key
值是 wm
(小写) ).
当我使用以下代码执行查询时:
var post = await _posts.Where(o => o.Key == key).Select(o => new
{
id = o.Id,
title = o.Title
}).SingleOrDefaultAsync();
我用一个值(wm 和 WM)传递了 key
,但得到了一个结果。第二个(wm).
我搜索了解决方案并找到了这个 question
还有这个 answer。在我尝试使用答案并在搜索 wm
时实现 [CaseSensitive]
数据注释后,我返回第一个 post,当我搜索 WM
时,我得到 null
.
我怎样才能解决这个问题并获得足够的 post 密钥?
更新: 已生成 SQL 查询:
SELECT [Limit1].[C1] AS [C1],
[Limit1].[Id] AS [Id],
[Limit1].[Title] AS [Title]
FROM (SELECT TOP (2) [Extent1].[Id] AS [Id],
[Extent1].[Title] AS [Title],
1 AS [C1]
FROM [dbo].[Posts] AS [Extent1]
WHERE ([Extent1].[Key] = 'wm' /* @p__linq__0 */)
OR (([Extent1].[Key] IS NULL)
AND ('wm' /* @p__linq__0 */ IS NULL))) AS [Limit1]
我用同样的改变解决了这个问题:
将
Key
数据类型更改为varchar
并执行 SQL 查询
SqlQuery<T>
:var post = await _uow.Database .SqlQuery<PostUrlDto>( "SELECT Id , Title FROM Posts WHERE [Key] = @postkey COLLATE SQL_Latin1_General_CP1_CS_AS", new SqlParameter("postkey", postkey)).SingleOrDefaultAsync()