我有一个问题,我还没有找到解决方案。为了简化问题:我有两个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
);
答案 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.TotalSpots
和ci.AmountSignedUp
是nullable
,那么就像这样:
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
)
}
);