2012-04-23 88 views
1

我有一個問題,我還沒能找到一個解決方案。爲了簡化問題:我有兩個SQL表,我正在使用LinQ to SQL。這兩個表代表課程,其中CourseType包含CourseName和TotalSpots,CourseInstance包含CourseDate,AmountSignedUp和CourseType的引用。 CourseType和CourseInstance之間有一對多關係。Linq orderby與子列表項目總和相比,主項目項目

現在我需要幫助的是Linq查詢/ Lambda表達式來排序CourseType和CourseInstance(如果它是可行的)。我希望在總共有多少個免費點(根據CourseType; CourseType.TotalSpots - CourseInstance.SignedUp下的每個CourseInstance進行計算)之後對CourseType進行排序,其中最空閒點的CourseType最先顯示。我希望CourseInstance能被排序模擬,由CourseInstance擁有多少個免費點(CourseType.TotalSpots - CourseInstance.AmountSignedUp)。

我無法理解如何解決這個問題。我已經看過類似的問題和問題,這是我到目前爲止,只是爲了給出一個基本的想法:

編輯:我已經完成了此代碼,將正確排序CourseType。我不確定如何獲得CourseInstance子列表的排序(CourseType.CourseInstance)。我想我將不得不在代碼中將它轉換爲列表,除非有人爲此提供了一個好的解決方案。我可以這樣做,因爲阿里昂建議,爲什麼我會標記他的答案。

var result= (
     from c in _db.CourseType 
     orderby ((c.TotalSpots * c.CourseInstance.Count) - c.CourseInstance.Sum(
           ci => (ci.AmountSignUp ?? 0))) descending 
     select c 
    ); 

回答

0

我不是很確定你想要什麼。但有點聽起來像你想通過c.TotalSpots - ci.AmountSignedUp訂購。這不夠嗎?

var result=(
    from ct in db.CourseType 
    join ci in db.CourseInstance 
     on ct.SomeCourseTypeKey equals ci.SomeCourseInstanceKey 
    orderby c.TotalSpots - ci.AmountSignedUp 
    select new {ci,ct} 
    ); 

其中db是linq數據上下文。

或者,如果c.TotalSpotsci.AmountSignedUpnullable那麼這樣的:

var result=(
     from ct in db.CourseType 
     join ci in db.CourseInstance 
      on ct.SomeCourseTypeKey equals ci.SomeCourseInstanceKey 
     orderby (c.TotalSpots??0) - (ci.AmountSignedUp??0) 
     select new {ci,ct} 
     ); 

我現在還不能確定要你想要的,但。你可以這樣做:

var result=(
    from ct in db.CourseType 
    orderby ct.TotalSpots 
    select new 
    { 
     ci, 
     CourseInstances=(
      from ci in db.CourseInstance 
      where ct.SomeCourseTypeKey == ci.SomeCourseInstanceKey 
      orderby ct.TotalSpots- ci.AmountSignedUp 
      select ci 
     ) 
    } 
    ); 
+0

感謝您的快速答覆Arion!我會讓結果只包含CourseType,而不是CourseType和CourseInstance。理由是CourseInstance將成爲CourseType的子列表,然後當我需要包含它的對象時,我可以查詢這個子列表。我希望將CourseType和子列表CourseInstance都分類。這是可行的還是您建議的解決方案,只有列表排序的解決方案?乾杯 – 2012-04-23 07:13:34

+0

那爲你修好了嗎? @ user1350598:記得投票答案,你認爲是好的。這給了我們一種溫暖的模糊感覺:P – Arion 2012-04-23 12:13:01