2008-09-30 71 views
2

我的技術人員Bretheren(和Sisteren,當然!),LinqtoSQL過濾器和order by語法

我有了以下的實體LinqToSql數據模型: data model http://danimal.acsysinteractive.com/images/advisor.jpg

我需要檢索所有顧問一個特定的辦公室,按照他們在辦公室內的順序排列。我有第一部分工作加入:

public static List<Advisor>GetOfficeEmployees(int OfficeID) 
{ 
    List<Advisor> lstAdvisors = null; 
    using (AdvisorDataModelDataContext _context = new AdvisorDataModelDataContext()) 
    { 
     var advisors = from adv in _context.Advisors 
         join advisoroffice in _context.OfficeAdvisors 
          on adv.AdvisorId equals advisoroffice.AdvisorId 
         where advisoroffice.OfficeId == OfficeID 
         select adv; 

     lstAdvisors = advisors.ToList(); 

    } 
    return lstAdvisors; 
} 

但是,我似乎無法包裹我的疲倦的大腦圍繞順序的條款。任何人都可以提一些建議嗎

回答

0
from adv in _context.Advisors 
where adv.OfficeAdvisor.Any(off => off.OfficeId == officeID) 
order adv by adv.OfficeAdvisor.First(off => off.OfficeId = officeID).Sequence 
select adv; 
+0

這似乎是一個奇怪的方式做這些的任何(),並首次加入()調用。即使它工作正常,它可能在SQL翻譯中創建不需要的子查詢。爲什麼不使用「連接」子句,或者使用「where」子句將兩個「from」子句綁定在一起? – Lucas 2008-10-01 21:20:08

+1

OO大腦想要使用Advisor對象及其屬性。數據大腦希望將它們連接在一起,並最終整理出類型。 – 2008-10-02 11:54:24

0
public static List<Advisor>GetOfficeEmployees(int OfficeID) 
{ 
    List<Advisor> lstAdvisors = null; 
    using (AdvisorDataModelDataContext _context = new AdvisorDataModelDataContext()) 
    { 
     var advisors = from adv in _context.Advisors 
         join advisoroffice in _context.OfficeAdvisors 
          on adv.AdvisorId equals advisoroffice.AdvisorId 
         where advisoroffice.OfficeId == OfficeID 
         group adv by adv.OfficeId into g 
         order by g.Sequence 
         select g; 

     lstAdvisors = advisors.ToList(); 

    } 
    return lstAdvisors; 
} 

注:我不能給目前這個測試基於Visual Studio,但應該工作。

0

您可以通過子句這樣添加訂單:

var advisors = from adv in _context.Advisors 
        join advisoroffice in _context.OfficeAdvisors 
       on adv.AdvisorId equals advisoroffice.AdvisorId 
       where advisoroffice.OfficeId == OfficeID 
       orderby advisoroffice.Sequence // < ----- 
       select adv;