gpt4 book ai didi

c# - 带有 SIMPLECrud 的 Dapper : GetList with WHERE behaving like LIKE instead of =

转载 作者:行者123 更新时间:2023-11-30 23:04:41 27 4
gpt4 key购买 nike

我有这个方法:

    public static IEnumerable<T> GetList(string where, Dictionary<string, object> parameters)
{
IEnumerable<T> entities;
using (var connection = OpenConnection())
{
entities = connection.GetList<T>(where, new DynamicParameters(parameters));
}
return entities;
}

我这样调用它:

string publicID = "463EC1EE-8AAB-4ABA-9B39-132BC8D3236E"
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("@APIPublicID", publicID);
var apiUsers = Repository<APIUsers>.GetList("WHERE APIPublicID = @APIPublicID", parameters).ToList();

GetList() 方法调用 SIMPLECrud .dll,它是 Dapper 的包装器。

效果很好。但这是真正奇怪的事情。如果我在 guid publicID 的末尾添加一些额外的字母或数字,它仍然有效:

代替:

string publicID = "463EC1EE-8AAB-4ABA-9B39-132BC8D3236E"

我愿意...

string publicID = "463EC1EE-8AAB-4ABA-9B39-132BC8D3236EABCDEFG"
.... // rest of the method as before

我得到了完全相同的结果。如果我缩短 guid,或者如果我更改其中的字符,那么它会按预期运行。

我在这里做错了什么?

最佳答案

我认为这与 dapper 或 SIMPLECrud 无关,而与 SQL Server 如何将字符串转换为 uniqueidentifier 有关。我假设您使用 SQL Server,但如果不是,您的数据库可能以类似的方式运行。

当将字符串转换为 uniqueidentifier 时,SQL 服务器将忽略过多的字符:

select cast('463EC1EE-8AAB-4ABA-9B39-132BC8D3236EABCDEFG' as uniqueidentifier)
-- no errors, returns 463EC1EE-8AAB-4ABA-9B39-132BC8D3236E

这意味着如果您示例中的 APIPublicID 列是 uniqueidentifier 类型,则以下查询的行为相同:

select * from MyTable WHERE APIPublicID = '463EC1EE-8AAB-4ABA-9B39-132BC8D3236E'
select * from MyTable WHERE APIPublicID = '463EC1EE-8AAB-4ABA-9B39-132BC8D3236EABCDEFG'

因为要比较,它们必须是同一类型,所以你的字符串被转换为uniqueidentifier,忽略多余的部分(ABCDEFG)。

关于c# - 带有 SIMPLECrud 的 Dapper : GetList with WHERE behaving like LIKE instead of =,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49244395/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com