2010-03-03 110 views
1

我想修改一些開源代碼來改變它如何過濾搜索結果。我想通過記錄的「名稱」來查詢,而不是它的關鍵。 (我有重複的名字,我想拉回來,但不同的密鑰記錄。)Linq子查詢

這拉回所有記錄

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方法或Search方法中通過子組篩選記錄,以及如何向linq添加子查詢?

感謝, 添

回答

1

,而不是直接將結果返回那裏,存儲在變量

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

查詢那麼你可以申請其他條件到查詢

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