Linq orderby子目录项的总和与主列表项的比较

时间:2012-04-23 06:35:02

标签: linq sql-order-by sublist

我有一个问题,我还没有找到解决方案。为了简化问题:我有两个SQL表,我正在使用LinQ to SQL。这两个表代表课程,其中CourseType包含CourseName和TotalSpots,CourseInstance包含CourseDate,AmountSignedUp和对CourseType的引用。 CourseType和CourseInstance之间存在一对多的关系。

现在我需要帮助的是Linq查询/ Lambda表达式,用于对CourseType和CourseInstance(如果它是可行的)进行排序。我希望在总共免费点数(从CourseType下的每个CourseInstance计算; CourseType.TotalSpots - CourseInstance.SignedUp)中计算CourseType,其中具有最多免费点的CourseType首先显示。我希望CourseInstance可以通过CourseInstance有多少个免费点(CourseType.TotalSpots - CourseInstance.AmountSignedUp)进行分类。

我无法理解如何解决这个问题。我看过simlar问题和问题,这是我到目前为止所做的,只是为了给出一个基本的想法:

编辑:到目前为止我已完成此代码,它将正确排序CourseType。我不确定如何将CourseInstance子列表排序(CourseType.CourseInstance)。我想我以后必须在代码中将它转换为列表,除非有人有一个很好的解决方案。我可以像Arion建议的那样做,为什么我会标记他的答案。

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

1 个答案:

答案 0 :(得分: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
        )
    }
    );