Linq语句为所有条目返回相同的结果

时间:2015-05-04 15:49:16

标签: vb.net linq

我需要对编码等级显示按钮的linq语句进行编码,以便用户显示所有记录或仅显示与特定等级匹配的记录。此外,还必须计算a=4b=3c=2d=1f=0的gpa。我已经更改了代码来实现where子句但是我得到了 但我得到一个错误 对于不允许隐含转换的选项严格的等级 string to boolean任何人都可以给我这个where子句的建议吗?

     Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click

    Dim dic As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)
    dic.Add("A", 4)
    dic.Add("B", 3)
    dic.Add("C", 2)
    dic.Add("D", 1)
    dic.Add("F", 0)



    Dim gpa = Aggregate Grade In CoursesDataSet.tblCourses.AsEnumerable()
       Where Grade.Grade = "A" Or "B" Or "C" Or "D" Or "F"
       Select Grade.Field(Of Integer)("CreditHours") * dic(Grade.Field(Of String)("Grade"))
       Into Sum()




    MessageBox.Show("GPa:" & gpa.ToString(CInt("C2")),
                   "College Courses", MessageBoxButtons.OK,

MessageBoxIcon.Information)

End Sub

结束班

![enter image description here][1]

3 个答案:

答案 0 :(得分:1)

我正在研究这个确切的问题。事实上,我们可能在同一个班级! 在将字母等级声明为常量后,我将每个等级的等级划分为总和:

        Dim ALetterAvg As Double =
        Aggregate ID In CoursesDataSet.tblCourses
        Where ID.Grade.ToUpper = "A"
        Select (ID.CreditHours * gradeAPoints) Into Sum()

汇总总小时数:

        Dim totalHours As Double =
        Aggregate hrs In CoursesDataSet.tblCourses
        Select hrs.CreditHours Into Sum()

然后将等级总和除以总小时数:

        Dim GPA As Double = (ALetterAvg + BLetterAvg + CLetterAvg + DLetterAvg + FLetterAvg) / totalHours

答案 1 :(得分:0)

LINQ查询中的变量作用域与其他任何地方的作用相同。因此,例如,如果您的查询在循环内,则您的变量Grade必须在该循环的范围内。

如果您指定目前宣布成绩的地点和方式,那么能够提供更具体的答案会有所帮助。

答案 2 :(得分:0)

假设您想要"翻译" Grade为相应的数值,我建议使用Dictionary

Dim dic As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)
dic.Add("A", 4)
dic.Add("B", 3)
dic.Add("C", 2)
dic.Add("D", 1)
dic.Add("F", 0)

现在,您可以汇总数据以获得等级总和。

'LinqToDataSet example:
Dim qry = Aggregate r In CoursesDataSet.tblCourses.AsEnumerable()
           Select  r.Field(Of Double)("CreditHours") * dic(r.Field(Of String)("Grade")) 
           Into Sum()

有关详细信息,请参阅:Linq To DataSet Examples (VB.NET)