it-swarm.com.de

Operator '==' kann nicht auf Operanden vom Typ 'int' und 'string' angewendet werden

Ich habe hier ein kleines Missverständnis. Warum habe ich hier einen Fehler. Muss ich ihn analysieren, was mit diesem Code nicht stimmt? 

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));
}

Danke für die Hilfe und schnelle Antwort!

PS: Ich denke, ich bin gerade dran, es scheint fast ein dummer kleiner Fehler zu sein ... 

12
user1767695

Sie müssen selectedDepartment in eine Ganzzahl konvertieren, bevor Sie sie in der LINQ-Abfrage vergleichen. 

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

In Ihrer Anfrage:

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

d.DepartmentId ist vom Typ int, wohingegen selectedDepartment eine Zeichenfolge ist und Sie beide mit dem ==-Operator vergleichen können. 

12
Habib

d.DepartmentId ist eine int und selectedDepartment ist eine Zeichenfolge.

Sie müssen mit Int32.Parse, Int32.TryParse oder Convert.ToInt32 konvertieren.

Bearbeiten:

int selectedDepartmentId = Convert.ToInt32(selectedDepartment);

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

Ihr ausgewähltesDepartment hat den Typ string und Ihre ID hat den Typ int. Sie sollten Ihr ausgewähltesDepartment in ein int konvertieren:

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