web-dev-qa-db-fra.com

L'opérateur '==' ne peut pas être appliqué aux opérandes de type 'int' et 'chaîne'

J'ai un petit malentendu ici, pourquoi ai-je ici une erreur dois-je analyser ce qui ne va pas avec ce code? 

UberTrackerEntities ctx = UberFactory.Context;
IEnumerable<HtUser> users = HtUser.GetAll();
string selectedBU = rcbBusinessUnits.SelectedValue;
string selectedDepartment = rcbDepartment.SelectedValue;

HtDepartment department = ctx.HtDepartments.SingleOrDefault(d => d.DepartmentId ==selectedDepartment);

if (department != null) 
{
    users = users.Where(u => u.HtDepartments.Contains(department));
}

Merci pour l'aide et réponse rapide!

PS: Je pense que je suis juste au-dessus de la chose, il semble juste être une petite erreur stupide ... 

12
user1767695

Vous devez convertir selectedDepartment en entier avant de le comparer dans la requête LINQ. 

int selectedDepartment = Convert.ToInt32(rcbDepartment.SelectedValue);

Dans votre requête:

ctx.HtDepartments.SingleOrDefault(d => d.DepartmentId == selectedDepartment);

d.DepartmentId est de type int alors que selectedDepartment est une chaîne et vous pouvez comparer les deux en utilisant l'opérateur ==

12
Habib

d.DepartmentId est une int et selectedDepartment est une chaîne.

Vous devrez convertir en utilisant Int32.Parse, Int32.TryParse ou Convert.ToInt32

Modifier:

int selectedDepartmentId = Convert.ToInt32(selectedDepartment);

HtDepartment department = ctx.HtDepartments.SingleOrDefault(d => d.DepartmentId == selectedDepartmentId));
0
Darren

Votre département sélectionné est de type chaîne et votre identifiant est de type int. Vous devriez convertir votre selectedDepartment en un int:

int selectedDepartment = Convert.ToInt32(rcbDepartment.SelectedValue);
0
Peter