0

请我有一个项目,我使用实体框架作为我的 ORM 查询数据库。这是我的查询

    Dim subjectSearch = From subSearch In DemoSchool.EssenceSubjectRegistrations Where subSearch.Session = drpSession.SelectedItem.Text _
                 AndAlso subSearch.Term = drpTerm.SelectedItem.Text AndAlso subSearch.RealClass.ClassSN = findClassSN.FirstOrDefault AndAlso _
                  subSearch.SubjectCode = drpSubject.SelectedValue _
                  Select New With {.SubjectRegSN = subSearch.SubjectRegSN,
                                  .FirstName = subSearch.Student.FirstName,
                                  .Surname = subSearch.Student.Surname,
                                   .CA1 = subSearch.CA1,
                                    .CA2 = subSearch.CA2,
                                    .CA3 = subSearch.CA3,
                                    .CA4 = subSearch.CA4,
                                    .CA5 = subSearch.CA5}

然后我查询我的结果,以便我可以通过这样做对其进行一些操作

    Dim secSubjectSearch = (From jamie In subjectSearch Select jamie).ToList() _
                       .Select(Function(jamie) New With {.SubjectRegSN = jamie.SubjectRegSN,
                       .FirstName = jamie.FirstName,
                       .Surname = jamie.Surname,
                        .CA1 = jamie.CA1,
                         .CA2 = jamie.CA2,
                         .CA3 = jamie.CA3,
                         .CA4 = jamie.CA4,
                         .CA5 = jamie.CA5,
                         .MidTerm = CDbl(jamie.CA1 + jamie.CA2 + jamie.CA3 + jamie.CA4 + jamie.CA5) / 5})

第二个查询的结果绑定到网格视图,该网格视图按照假设呈现的那样正确呈现。我的问题是我想在 .MidTerm 有界列之后在 gridview 上创建一个名为 Rank 的虚拟列,该列将显示搜索结果中每个人记录的位置。

    NAME        CA1      CA2      CA3    CA4     CA5   MIDTERM    RANK
    James       50        50      60      40      60      52        3
    Essty       100       50      50      50      50      60        2
    Markus      100       40      50      60      50      60        2
    Code        100       100     100     100     50      90        1

以上是gridview 列的格式。我希望列 Rank 是根据学生的期中分数计算的虚拟列。代码 VB 得分 90 所以他的排名是 1 等等。请我不知道如何计算这个排名列和代码得到最高和最小的。我真的需要帮助谢谢

4

1 回答 1

0

两种方式。

  1. 使用未绑定列并计算/显示排名

  2. 有一个 RANK 字段并预先计算并绑定它,例如:

            Dim secSubjectSearch = (From jamie In subjectSearch Select jamie).ToList() _
                   .Select(Function(jamie) New With {.SubjectRegSN = jamie.SubjectRegSN,
                   .FirstName = jamie.FirstName,
                   .Surname = jamie.Surname,
                   .CA1 = jamie.CA1,
                   .CA2 = jamie.CA2,
                   .CA3 = jamie.CA3,
                   .CA4 = jamie.CA4,
                   .CA5 = jamie.CA5,
                   .MidTerm = CDbl(jamie.CA1 + jamie.CA2 + jamie.CA3 + jamie.CA4 + jamie.CA5) / 5,
                   .RANK = -1}).ToList()
            dim sorted = secSubjectSearch.Select(function(n) n.MidTerm).Distinct().OrderByDescending(function(n) n).ToList()
            for each itm in secSubjectSearch
                itm.RANK = sorted.IndexOf(itm.MidTerm) + 1
            next
    

-- 没测试,用记事本写的...

于 2013-10-24T10:06:06.347 回答