2010-03-03 2 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; 
    } 

where 원인의 마지막 2 줄은 내가 바꾸고 싶은 부분입니다. fkey (p.originating_group, p.assigned_to_group 및 subgrp)를 사용하는 대신 subgroupName이라는 이름을 사용하고 싶습니다.

GetTickets 메서드 나 Search 메서드의 하위 그룹별로 레코드를 필터링해야합니까? 그리고 linq에 하위 쿼리를 추가하려면 어떻게해야합니까?

감사합니다, 팀

답변

1

대신 직접이 결과를 반환하고 해당 쿼리

return from c in query 
     where...//aply additional criteria here 
에 다른 기준을 적용 할 수있는 변수

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

에서 쿼리를 저장