【发布时间】:2017-04-07 23:55:14
【问题描述】:
过去两天我一直在翻译我的程序以使用 Entity Framework 6。在大多数情况下,我通过简单的 CRUD 操作来解决它。今天我遇到了一个障碍。我正在尝试转换;
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 - Sample Queries”的程序,但它显示一个 MAX 查询;
Public Sub LinqToSqlCount08()
Dim latestHire = Aggregate emp In db.Employees _
Into Max(emp.HireDate)
Console.WriteLine(latestHire)
End Sub
如果我想包含 PayYear,这将不起作用。
我可以将每个部分作为单独的查询来获取,但这感觉不对。
我该如何正确地做到这一点?
【问题讨论】:
标签: sql vb.net linq sql-server-2012 entity-framework-6