Оператор '==' нельзя применить к операндам типа 'System.Guid' и 'string' в linq to entity - PullRequest
12 голосов
/ 04 ноября 2011

Я получаю эту ошибку: «Оператор» == не может быть применен к операндам типа «System.Guid» и «строка» в linq для кодирования объекта ниже кода.в приведенном ниже коде CustomerId - это Guid, а customerProfileId - это строка.

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

Ответы [ 7 ]

22 голосов
/ 04 ноября 2011

Вы не можете сравнивать 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 вызовет исключение, если оно отформатировано неправильно. Таким образом, если вы получили customerProfileId из пользовательского ввода (например, поля формы или URL), вы должны сначала проверить его.

Однако, если вы перенесете преобразование в 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;
3 голосов
/ 04 ноября 2011

Это потому, что вы не можете приравнять Guid и строку.

Поэтому вам нужно сначала преобразовать Guid в строку.Обычно я бы предложил:

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

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

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

1 голос
/ 04 ноября 2011

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

0 голосов
/ 11 мая 2016
var accountQuery = from C in CustomerModel.CustomerProfile
              where C.CustomerId == new Guid(customerProfileId) // Error here                    
             select C;

вам нужно сгенерировать новый guid из строки, и он должен работать

0 голосов
/ 04 ноября 2011

Вы можете сделать C.CustomerId.toString () == customerProfileId или заменить customerProfileId новым Guid (customerProfileId)

Второй должен быть быстрее, поскольку его только одно преобразование и сравнение guid выполняются быстрее, чем сравнение строк.

0 голосов
/ 04 ноября 2011

А в чем вопрос?

Очевидно, что одно из значений - Guid, а другое - строка. Вы можете попробовать сравнить как-то так:

C.CustomerId == новый Guid (customerProfileId), считающий, что C.CustomerId является Guid.

0 голосов
/ 04 ноября 2011

Измените его на:

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

Или проанализируйте ваш customerProfileId для Guid и используйте его в запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...