2015-10-03 3 views
1

Я пытаюсь реализовать функцию поиска для своего приложения, но то, что я хочу, это отправить весь список, если нет указанного ключевого слова, и у меня есть предложение where.Использование where all on linq

Вот мои действия:

Public ActionResult classes(string keyword ="") 
{ 
     EmployeeContext emp = new EmployeeContext(); 

     List<classlist> asd = (from subj in emp.Subjects 
           join prof in emp.professors on subj.id equals prof.id 
           join dep in emp.departments on prof.id equals dep.id 
           where subj.subj == keyword 
           select new classlist() 
           { 
            id = subj.id, 
            subj = subj.subj, 
            days = subj.days, 
            cstart = subj.cstart, 
            cend = subj.cend, 
            units = subj.units, 
            fname = prof.fname, 
            lname = prof.lname, 
            status = prof.status, 
            department = dep.dname, 
            isSelected = false 
           }).ToList(); 

     return View(asd); 
} 

Я исследовал об этом, и он говорит, чтобы использовать «ALL», но он не работает. Я не хочу делать оператор if else, если ключевое слово пустое или нет, поскольку это сделает мой код уродливым. Свойство subj - это название темы.

+0

вы бы добавили ИЛИ в свое предложение where, написанное || String.IsNullOrEmpty (ключевое слово) – Les

ответ

3

Вы могли бы сделать, как этот

where subj.subj == keyword || keyword=="" 

Или это, так что вам не нужен отдельный where

from subj in emp.Subjects.Where(x=>x.subj == keyword || keyword=="") 
join prof in emp.professors..... 
3

В дополнение к ответу, предоставленной @DarkKnight, вы можете также рычаги тот факт, что запрос на самом деле не выполнен до тех пор, пока вы не материализуете его с помощью ToList, так что вы можете сделать что-то вроде этого:

public ActionResult classes(string keyword ="") 
{ 
    EmployeeContext emp = new EmployeeContext(); 

    IEnumerable<classlist> asd = (from subj in emp.Subjects 
          join prof in emp.professors on subj.id equals prof.id 
          join dep in emp.departments on prof.id equals dep.id 
          select new classlist() 
          { 
           id = subj.id, 
           subj = subj.subj, 
           days = subj.days, 
           cstart = subj.cstart, 
           cend = subj.cend, 
           units = subj.units, 
           fname = prof.fname, 
           lname = prof.lname, 
           status = prof.status, 
           department = dep.dname, 
           isSelected = false 
          }); 

    //Apply the where clause if required 
    if(!string.IsNullOrEmpty(keyword)) 
     asd = asd.Where(c => c.subj == keyword); 

    //Return the materialised list now: 
    return View(asd.ToList()); 
} 

Зачем вам это нужно?

  1. Возможно, у вас может быть намного сложнее, где предложение применяется, и этот способ намного проще кодировать.
  2. Этот метод может быть немного более эффективным, поскольку предложение where where не передается в хранилище данных, когда это не требуется.
+0

Ох, я вижу, спасибо за информацию. Это очень полезно –

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