2015-02-10 2 views
1

Любой мог бы сказать, почему этот код работает правильно:Linq, где положение не фильтрует

EmployeeContextDataContext empContext = new EmployeeContextDataContext(); 

var departaments = empContext.Departments.Where(x => x.Name == "IT" || x.Name=="HR"); 

foreach (Department dept in departaments) 
     { 
     Response.Write(dept.Name); 

     var empInDept = dept.Employees; 

     foreach (var employee in empInDept) 
      { 
      Response.Write(employee.FirstName + employee.Gender); 
      } 
     } 

И в тот момент я добавляю .где (х => x.Gender == «мужчина»); он ничего не бросает на экран?

foreach (Department dept in departaments) 
     { 
     Response.Write(dept.Name); 

     var empInDept = dept.Employees.Where(x => x.Gender =="Male"); 

     foreach (var employee in empInDept) 
      { 
      Response.Write(employee.FirstName); 
      } 
     } 
+3

Потому что у вас нет сотрудников-мужчин .... –

+0

Является ли «Пол» строкой? Вы рассматривали «служащий» перед фильтрацией, чтобы убедиться, что у кого-то действительно есть это значение? –

+0

@JustinPihony Только не в ИТ или HR. :) –

ответ

1

У вас есть работники мужского пола в сфере информационных технологий или HR?

Если вы это сделаете, вы уверены, что столбец «Пол» имеет значение «M»?

Попробуйте удалить чувствительность к регистру:

var empInDept = dept.Employees.Where(x => x.Gender.ToLower().Trim() == "male"); 
+0

Спасибо, Мэтью, .Trim() выполнил эту работу, кажется, у db были белые пробелы в столбце gender :(, Большое спасибо. – Arah

0

Вы можете разместить точки останова внутри выражение x.Gender =="Male" шагнуть через него.

Смежные вопросы