2012-04-23 52 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