Linq подзапросы - PullRequest
       4

Linq подзапросы

1 голос
/ 03 марта 2010

Я пытаюсь изменить некоторый открытый исходный код, чтобы изменить способ фильтрации результатов поиска. Я хочу сделать запрос по «имени» записи, а не по ее ключу. (У меня есть записи с повторяющимися именами, которые я хочу вернуть, но с разными ключами.)

Это возвращает все записи

 public static IEnumerable<ticket> GetTickets(stDataContext db, bool? active)
    {
        return from p in db.tickets
               where
                   (active == null ? true :
                   ((bool)active ? p.active : !p.active))
               select p;
    }

Следующий уровень в коде запрашивает этот возврат по ID-ключу. Я не уверен, какое место мне следует изменить.

 public static IEnumerable<ticket> Search(stDataContext db, string[] keywords, int usr, DateTime dtFrom, DateTime dtTo, int prty, int stat, bool onlyOpen, int grp, int subgrp,string subgroupName, bool? active)
    {
        return from p in GetTickets(db, active)
               where
                   p.title.ToLower().Contains(keywords[0].ToLower()) &&
                   p.title.ToLower().Contains(keywords[1].ToLower()) &&
                   p.title.ToLower().Contains(keywords[2].ToLower()) &&
                   p.title.ToLower().Contains(keywords[3].ToLower()) &&
                   p.title.ToLower().Contains(keywords[4].ToLower()) &&
                   p.title.ToLower().Contains(keywords[5].ToLower()) &&
                   p.title.ToLower().Contains(keywords[6].ToLower()) &&
                   p.title.ToLower().Contains(keywords[7].ToLower()) &&
                   p.title.ToLower().Contains(keywords[8].ToLower()) &&
                   p.title.ToLower().Contains(keywords[9].ToLower()) &&

                   p.submitter == (usr < 0 ? p.submitter : usr) &&
                   p.submitted >= dtFrom &&
                   p.submitted <= dtTo &&
                   (prty == 0 ? true : p.priority == prty) &&
                   (stat == 0 ? true : p.ticket_status == stat) &&
                   (!onlyOpen ? true : p.ticket_status != 5) &&
                   (grp == 0 ? true : (
                   (p.sub_unit2.unit_ref == grp) ||
                   (p.sub_unit.unit_ref == grp))) &&
                   (subgrp == 0 ? true : (
                   (p.originating_group == subgrp) ||
                   (p.assigned_to_group == subgrp)))
               select p;
    }

Последние 2 строки причины, которые я хочу изменить. Вместо использования fkey (p.originating_group, p.assigned_to_group и subgrp) я хочу использовать имя subgroupName.

Должен ли я фильтровать записи по подгруппе в методе GetTickets или в методе поиска и как добавить подзапрос в linq?

Спасибо, Тим

1 Ответ

1 голос
/ 05 сентября 2011

вместо непосредственного возврата результатов, сохраните запрос в переменной

var query = from p in GetTickets(db, active)
               where...

тогда вы можете применить другие критерии к этому запросу

return from c in query
       where...//aply additional criteria here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...