我有一个名为Post
的表,其中有一个名为key
的列:
Id | Key | Title
--------------------
1 | WM | First
--------------------
2 | wm | Second
正如您所看到的,key
的第一个Post
值为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。在我搜索[CaseSensitive]
后尝试使用答案并实施wm
数据注释后,我收到了第一篇文章,当我搜索WM
时,我得到了null
。
我怎样才能解决这个问题,并用钥匙获得足够的帖子?
更新 生成的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]
答案 0 :(得分:1)
我用同样的改变解决了这个问题:
将Key
数据类型更改为varchar
并使用SqlQuery<T>
执行SQL查询:
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()