gpt4 book ai didi

c# - 运算符 '==' 不能应用于 linq to entity 中类型为 'System.Guid' 和 'string' 的操作数

转载 作者:可可西里 更新时间:2023-11-01 08:03:16 25 4
gpt4 key购买 nike

我在 linq to entityframework 代码下方收到此错误“运算符‘==’无法应用于‘System.Guid’和‘string’类型的操作数”。在下面的代码中,CustomerId 是 Guid,customerProfileId 是字符串。

var accountQuery = from C in CustomerModel.CustomerProfile
where C.CustomerId == customerProfileId // Error here
select C;

最佳答案

您不能直接将 Guid 与字符串进行比较。将字符串转换为 Guid 或将 Guid 转换为字符串。

将 Guid 转换为字符串就像对变量调用 .ToString() 一样简单,但重要的是要知道格式化 Guid 的方法不止一种。带或不带破折号:

someguid.ToString() 会给你类似 B06A6881-003B-4183-A8AB-39B51809F196someGuid.ToString("N") 将返回类似于 B06A6881003B4183A8AB39B51809F196

如果您决定将 C.CustomerId 转换为字符串,请确保您知道 customerProfileId 的格式。

如果它可以是任何一种格式,您最好将 customerProfileId 转换为 guid:new Guid(customerProfileId)

这样做的缺点是,如果格式不正确,从字符串到 Guid 的转换将抛出异常。因此,如果您从用户输入(如表单字段或 URL)中获得了 customerProfileId,您应该首先对其进行验证。

但是,如果您在查询之外提取到 Guid 的转换,您最终可能会获得更好的性能,因为比较 Guid 可能比比较字符串更快。

var customerProfileGuid = new Guid(customerProfileId);  
// wrap in try catch if needed

var accountQuery = from C in CustomerModel.CustomerProfile
where C.CustomerId == customerProfileGuid
select C;

关于c# - 运算符 '==' 不能应用于 linq to entity 中类型为 'System.Guid' 和 'string' 的操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8009041/

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