Оператор '==' не может применяться к операндам типа 'System.Guid " и "строка" в linq to entity

Я получаю эту ошибку 'Operator' = = ' не может быть применен к операндам типа 'System.Guid ' и 'string" в linq для entityframework ниже кода. в ниже код код GUID и customerProfileId строка.

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

7 ответов


вы не можете напрямую сравнить Guid со строкой. Преобразуйте строку в Guid или Guid в строку.

преобразование GUID в строку так же просто, как вызов .ToString() в переменной, но важно знать, что существует несколько способов форматирования Guid. Либо с тире, либо без тире:

someguid.ToString() даст вам что-то вроде B06A6881-003B-4183-A8AB-39B51809F196 someGuid.ToString("N") возвращает что-то вроде B06A6881003B4183A8AB39B51809F196

если вы решите конвертировать C.CustomerId в string убедитесь, что вы знаете, какой формат customerProfileId в.

если это может быть любой формат, вам может быть лучше конвертировать customerProfileId guid:new Guid(customerProfileId).

недостатком этого является то, что преобразование из string в Guid вызовет исключение, если оно не отформатировано правильно. Итак, если у вас есть customerProfileId из пользовательского ввода (например, поле формы или URL) вы должны сначала проверить его.

однако, если вы вытащите преобразование в 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)

но ToString() Не существует в Linq to Entities.

ответ на этот вопрос - проблема с получением значения строки GUID в запросе Linq-to-Entity - вероятно, поможет.


необходимо преобразовать CustomerId в строку (вызов .ToString()) или customerProfileId to Guid (вызов Guid.Parse()), а затем сравнить их.


меняем его на:

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

или проанализируйте customerProfileId на 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 из строки, и он должен работать