我收到此错误'运算符'=='无法应用于linq中代码下方的objectframework的类型'System.Guid'和'string'的操作数。
在下面的代码中,CustomerId为Guid,customerProfileId为string。

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-39B51809F196的功能someGuid.ToString("N")将返回类似B06A6881003B4183A8AB39B51809F196的内容

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

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

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

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

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实体中 'System.Guid'和 'string'类型的操作数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8009041/

10-15 19:11