Linq 使用where子句返回值

Linq 使用where子句返回值,linq,where,Linq,Where,我有两个表格如下: ScholarSubject ScholarSubjectID<pk> ScholarID SubjectID Mark public List<object> getDegreeByAPSandRequirements() { using (DataLayer.CareerDatabaseEntities context = new DataLayer.CareerDatabaseEntities()) {

我有两个表格如下:

 ScholarSubject
ScholarSubjectID<pk>
ScholarID
SubjectID
Mark
public List<object> getDegreeByAPSandRequirements()
    {
        using (DataLayer.CareerDatabaseEntities context = new DataLayer.CareerDatabaseEntities())
        {
            return (from Degrees in context.Degrees
                    join admissions in context.AdmissionReqs on
                    Degrees.DegreeCode equals admissions.DegreeCode
                    join subject in context.Subjects on
                    admissions.SubjectID equals subject.SubjectID
                    join scholarsubject in context.ScholarSubjects on
                    subject.SubjectID equals scholarsubject.SubjectID
                    join scholar in context.Scholars on
                    scholarsubject.ScholarID equals scholar.ScholarID
                    where Degrees.APSScore <= scholar.APSScore && admissions.MinimumMark <= scholarsubject.NSC && scholarsubject.SubjectID.Equals(admissions.SubjectID)
                    select Degrees).Distinct().ToList<object>();

        }
    }
我试图返回学位表(带有PK degreeID)中的所有内容,其中学者的分数低于入学的最低分数。我的质询如下:

 ScholarSubject
ScholarSubjectID<pk>
ScholarID
SubjectID
Mark
public List<object> getDegreeByAPSandRequirements()
    {
        using (DataLayer.CareerDatabaseEntities context = new DataLayer.CareerDatabaseEntities())
        {
            return (from Degrees in context.Degrees
                    join admissions in context.AdmissionReqs on
                    Degrees.DegreeCode equals admissions.DegreeCode
                    join subject in context.Subjects on
                    admissions.SubjectID equals subject.SubjectID
                    join scholarsubject in context.ScholarSubjects on
                    subject.SubjectID equals scholarsubject.SubjectID
                    join scholar in context.Scholars on
                    scholarsubject.ScholarID equals scholar.ScholarID
                    where Degrees.APSScore <= scholar.APSScore && admissions.MinimumMark <= scholarsubject.NSC && scholarsubject.SubjectID.Equals(admissions.SubjectID)
                    select Degrees).Distinct().ToList<object>();

        }
    }
public List getDegreeByAPSandRequirements()
{
使用(DataLayer.CareerDatabaseEntities上下文=新DataLayer.CareerDatabaseEntities())
{
返回(从上下文中的度。度
在上下文中加入录取。录取要求在
Degrees.DegreeCode等于admissions.DegreeCode
在上下文中连接主题。在上下文中连接主题
主语等于主语
在上下文中连接scholarsubject.ScholarSubjects on
subject.subject等于scholarsubject.subject
在上下文中加入学者
学者subject.scholard等于scholar.scholard

where Degrees.APSScore我仍然不确定我是否理解您的意图-除非您的数据库中只有一位学者,否则在我看来,您将返回所有学者获得的所有学位的列表。如果您不想这样做,您需要在
where
子句中筛选学者

但是无论如何,为了获得更多的信息,我会尝试做两件事

  • 我将更改您的查询,并以
    scholar
    开始,而不是以
    degree
    开始,因为这样可以避免重复:

        from scholar in context.Scholars 
        join scholarsubject in context.ScholarSubjects on scholar.ScholarID equals scholarsubject.ScholarID
        join subject in context.Subjects on scholarsubject.SubjectID equals subject.SubjectID
        join admission in context.AdmissionReqs on subject.SubjectID equals admission.SubjectID
        join degree in context.Degrees on admission.DegreeCode equals degree.DegreeCode
        where degree.APSScore <= scholar.APSScore 
            && admission.MinimumMark <= scholarsubject.NSC 
          //&& scholarsubject.SubjectID.Equals(admission.SubjectID) // you should not need this line as you have the joins in place to assert this
        select degree)
       .Distinct()
       .ToList<object>();
    

  • 试着看看如果删除“where”,你会得到什么?1.你想要那些学者值小于最小值或最小值小于学者值的学位吗?2.你只返回学位-这些学位在不同学者之间是否有任何区别?或者一个学位可以分配给多个学者吗/科目?如果是这样,即使在一个例子中你不返回学位,你也可以获得另一个同样的学位。我希望学生的分数大于最低分数,因此我更改了admissions.MinimumMark=admissions.MinimumMark,但这只检查两个分数中的一个(在ScholarSubject中)如果两者都符合最低分数,则不会。我只返回一名学者的学位。一切都正常,但我发现我的问题在于学者主体。主体。等于(入学。主体)检查。我想检查,对于scholarsubject中所有与入学科目匹配的科目,检查入学分数和aps分数。我的where语句是:“where Degrees.apscore为了简化它,我想检查它是否与两个科目匹配(所以检查id的组合)。当然列表方法可以做到这一点,但不确定。其他一切都很好,只是检查那些主体的组合,而不仅仅是一个主体。有列表方法可以做到这一点吗?@user1397978-我很困惑-你加入了主体,这意味着你将为每个主体ID得到一个单独的结果。在这种情况下,我看不到这将如何评估为true
    admissions.SubjectID==1&&admissions.SubjectID==21
    -该SubjectID将为1或21。除非您希望对某个学者的结果进行分组并对该组进行评估?即,如果所有科目都达到了最低要求,则返回学位?