Sie können es schreiben wie
IQueryable query = from staff in dataContext.Staffs;
query = from staff in query where (name1 != null && staff.name == name1);
Auf diese Weise wird der zweite Teil Ihrer Bedingung nicht ausgewertet, wenn Ihre erste Bedingung als falsch ausgewertet wird
Aktualisierung:
wenn du schreibst
IQueryable query = from staff in dataContext.Staffs;
query = from staff in query where (name1 == null || staff.name == name1);
und name1 ist null, der zweite Teil Ihrer Bedingung wird nicht ausgewertet, da or Bedingung nur eine Bedingung benötigt, um wahr zurückzugeben
siehe diesen Link für weitere Details