Оператор '==' не может применяться к операндам типа "System.Guid" и "string" в linq для объекта
Я получаю эту ошибку 'Operator' == 'не может быть применен к операндам типа' System.Guid 'и' string '' в linq для сущности в коде ниже. в приведенном ниже коде CustomerId является Guid и customerProfileId является строкой.
var accountQuery = from C in CustomerModel.CustomerProfile
where C.CustomerId == customerProfileId // Error here
select C;
Ответы
Ответ 1
Вы не можете напрямую сравнивать Guid с строкой. Преобразуйте строку в Guid или Guid в строку.
Преобразование Guid в строку так же просто, как вызов .ToString()
для переменной, но важно знать, что существует более одного способа форматирования Guid. Либо с тире или без них:
someguid.ToString()
даст вам что-то вроде B06A6881-003B-4183-A8AB-39B51809F196
someGuid.ToString("N")
вернет что-то вроде B06A6881003B4183A8AB39B51809F196
Если вы решите преобразовать C.CustomerId
в строку, убедитесь, что знаете, в каком формате находится C.CustomerId
customerProfileId
.
Если это может быть любой формат, вам может быть лучше конвертировать customerProfileId
в guid: new Guid(customerProfileId)
.
Недостатком этого является то, что преобразование из строки в Guid приведет к исключению, если оно не отформатировано правильно. Итак, если вы получили customerProfileId
от ввода пользователя (например, поля формы или URL-адреса), вы должны сначала его проверить.
Однако, если вы выберете преобразование в 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;
Ответ 2
Это потому, что вы не можете приравнивать Guid и строку.
Поэтому вам нужно сначала преобразовать Guid в строку. Обычно я предлагаю:
where C.CustomerId.ToString().Equals(customerProfileId)
но ToString()
не существует в Linq для Entities.
Ответ на этот вопрос - проблема с получением строкового значения GUID в запросе Linq-To-Entity - вероятно, поможет.
Ответ 3
Вы должны преобразовать CustomerId
в строку (вызов .ToString()
) или customerProfileId
в Guid
(вызов Guid.Parse()
), а затем сравнить их.
Ответ 4
Измените его на:
var accountQuery = from C in CustomerModel.CustomerProfile
where C.CustomerId.ToString() == customerProfileId
select C;
Или проанализируйте ваш customerProfileId в Guid и используйте это в запросе.
Ответ 5
И в чем вопрос?
Очевидно, что одно из значений - Guid, а другое - строка. Вы можете как-то сравнить:
C.CustomerId == new Guid (customerProfileId), использующий C.CustomerId.
Ответ 6
Можете ли вы выполнить C.CustomerId.toString() == clientProfileId или заменить clientProfileId новым Guid (customerProfileId)
Второй должен быть быстрее, поскольку его единственное преобразование и сравнение guid сравниваются быстрее, чем сравнение строк.
Ответ 7
var accountQuery = from C in CustomerModel.CustomerProfile
where C.CustomerId == new Guid(customerProfileId) // Error here
select C;
вам нужно создать новый указатель из строки, и он должен работать