私は過去2日間Entity Framework 6を使用するように私のプログラムを翻訳してきました。ほとんどの場合、私は単純なCRUD操作でそれを持っています。今日私は悩んだ。私は変換しようとしています。グループを使用してLinqで2つの列にMaxを取得しよう
Using SQLSERVER_Connection As New SqlConnection(GlobalVariables.SQLServer_Login_Details)
Using SQLCommand As New SqlCommand
Dim Command As New Text.StringBuilder
Command.AppendLine("SELECT TOP(1) EarningsYear AS PayYear, Max(EarningsAmt) AS EarnAmt, Max(Hours) AS HRS")
Command.AppendLine("FROM interview_payroll")
Command.AppendLine("GROUP BY CLIENTCODE, EarningsYear, SSN")
Command.AppendLine("HAVING CLIENTCODE = @CLIENTCODE AND SSN = @SSN ORDER BY EarningsYear DESC;")
SQLCommand.CommandText = Command.ToString
SQLCommand.Connection = SQLSERVER_Connection
SQLCommand.Parameters.Add("@CLIENTCODE", SqlDbType.VarChar).Value = sCLIENTCODE
SQLCommand.Parameters.Add("@SSN", SqlDbType.VarChar).Value = txtSSN.Text
SQLSERVER_Connection.Open()
Using Reader As SqlDataReader = SQLCommand.ExecuteReader()
While Reader.Read()
If Not IsDBNull(Reader("PayYear")) Then txtPayrollSourceDate.Text = CStr(Reader("PayYear"))
If Not IsDBNull(Reader("EarnAmt")) Then txtPayrollErnAmt.Text = CStr(Reader("EarnAmt"))
If Not IsDBNull(Reader("HRS")) Then txtPayrollHRS.Text = CStr(Reader("HRS"))
End While
End Using
SQLSERVER_Connection.Close()
End Using
End Using
とLinq。
私はこれまで通りました。
Using DB As New wotcEntities
Dim Reader = From payroll In DB.interview_payroll
Where payroll.CONTROL = CONTROL And payroll.CLIENTCODE = sCLIENTCODE
Group payroll By payroll.CLIENTCODE, payroll.EarningsYear, payroll.SSN Into GPayroll = Group
End Using
しかし、私はEarningsAmtとHoursでMAXを得るためにハードルを飛ばしているようではありません。私はこのプログラムを 'LINQ - サンプルクエリ'と呼びますが、MAXクエリは次のように表示されます。
Public Sub LinqToSqlCount08()
Dim latestHire = Aggregate emp In db.Employees _
Into Max(emp.HireDate)
Console.WriteLine(latestHire)
End Sub
私はPayYearを含める場合はうまくいかないでしょう。
私はちょうど別々のクエリとして各部分をつかむことができますが、それは正しく感じません。
これを正しく行うにはどうすればよいですか?