运算符'=='不能应用于linq到实体的'System.Guid'和'string'类型的操作数

时间:2011-11-04 12:15:13

标签: c# .net linq entity-framework linq-to-entities

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

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

7 个答案:

答案 0 :(得分:22)

您无法直接将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;

答案 1 :(得分:3)

那是因为你不能把Guid和一个字符串等同起来。

所以你需要先将Guid转换成字符串。通常我会建议:

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

但Linq to Entities中不存在ToString()

这个问题的答案 - Problem getting GUID string value in Linq-To-Entity query - 可能会有所帮助。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

将其更改为:

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

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

答案 4 :(得分:0)

问题是什么?

显然,其中一个值是Guid,而另一个是字符串。您可以尝试以某种方式进行比较:

C.CustomerId ==新的Guid(customerProfileId)以C.CustomerId为指导。

答案 5 :(得分:0)

你能做一个C.CustomerId.toString()== customerProfileId或用new Guid替换customerProfileId(customerProfileId)

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

答案 6 :(得分:0)

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

你需要从字符串生成新的guid,它应该可以工作