操作员'==';不能应用于类型为';System.Guid';和';字符串';在li

本文关键字:字符串 li Guid 类型 不能 应用于 操作员 System | 更新日期: 2023-09-27 18:13:27

我收到此错误"Operator"=="无法应用于代码下面的实体框架linq中类型为"System.Guid"answers"string"的操作数。在下面的代码中,CustomerId是Guid,customerProfileId是字符串。

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

操作员'==';不能应用于类型为';System.Guid';和';字符串';在li

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

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

someguid.ToString()会给你类似B06A6881-003B-4183-A8AB-39B51809F196的东西someGuid.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;

这是因为不能将Guid和字符串等同起来。

因此,您需要先将Guid转换为字符串。通常我建议:

where C.CustomerId.ToString().Equals(customerProfileId)

但是CCD_ 11不存在于Linq to Entities中。

这个问题的答案——在Linq-to实体查询中获取GUID字符串值的问题——可能会有所帮助。

必须将CustomerId转换为字符串(调用.ToString()(或将customerProfileId转换为Guid(调用Guid.Parse()(,然后进行比较。

将其更改为:

var accountQuery = from C in CustomerModel.CustomerProfile
                  where C.CustomerId.ToString() == customerProfileId                
                 select C;

或者将customerProfileId解析为Guid并在查询中使用该Guid。

问题是什么?

显然,其中一个值是Guid,而另一个值则是字符串。你可以试着这样比较:

C.CustomerId==新的Guid(customerProfileId(,将C.CustomerId作为Guid。

是否可以执行C.CustomerId.toString((==customerProfileId或将customerProfileId替换为新的Guid(customerProfileId(

第二个应该更快,因为它只有一个转换和guid比较比字符串比较快。

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

您需要从字符串中生成新的guid,它应该可以在

中工作