Linq子查询

时间:2010-03-03 20:32:55

标签: linq linq-to-sql

我正在尝试修改一些开源代码,以更改过滤搜索结果的方式。我想查询记录的“名称”而不是密钥。 (我有重复名称的记录,我想撤回,但键不同。)

这会拉回所有记录

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

原因的最后两行是我想要改变的。我没有使用fkey(p.originating_group,p.assigned_to_group和subgrp),而是使用名称subgroupName

我应该在GetTickets方法或Search方法中按子组过滤记录,如何将子查询添加到linq?

谢谢, 添

1 个答案:

答案 0 :(得分:1)

而不是直接返回结果,将查询存储在变量

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

然后您可以将其他条件应用于该查询

return from c in query
       where...//aply additional criteria here