我需要对编码等级显示按钮的linq语句进行编码,以便用户显示所有记录或仅显示与特定等级匹配的记录。此外,还必须计算a=4
,b=3
,c=2
,d=1
,f=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]
答案 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)