Оператор '==' не может применяться к операндам типа '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 из строки, и он должен работать