1

我有一个问题,我还没有找到解决方案。为了简化问题:我有两个 SQL 表,并且我正在使用 LinQ to SQL。这两个表代表 Courses,其中 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)进行排序。

我不知道如何解决这个问题。我已经查看了类似的问题和问题,这是我到目前为止所做的,只是为了给出一个基本的想法:

编辑:到目前为止,我已经完成了这段代码,它将正确地对 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
     );
4

1 回答 1

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.TotalSpots和然后ci.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
        )
    }
    );
于 2012-04-23T06:48:31.470 回答