2016-11-23 84 views
2

我一直在翻譯我的程序在過去兩天使用實體框架6。大多數情況下,我通過簡單的CRUD操作就可以解決這個問題。今天我遇到了一個障礙。我試圖轉換;試圖使用組獲得與Linq的兩列上的最大值

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 

但我似乎無法跳過在賺錢和小時中獲得MAX的障礙。我有這個程序叫'LINQ - 樣本查詢',但它顯示MAX查詢爲;

Public Sub LinqToSqlCount08() 
    Dim latestHire = Aggregate emp In db.Employees _ 
        Into Max(emp.HireDate) 

    Console.WriteLine(latestHire) 
End Sub 

這是行不通的,如果我想包括PayYear。

我可以抓住每個部分作爲單獨的查詢,但這並不正確。

如何正確執行此操作?

回答

0

我強烈推薦應用程序「LINQPad」。它可以幫助您編寫查詢並立即查看結果。

我創建了一個類似於我可以從您的查詢中收集的表格,並且能夠編寫這個查詢,我相信這些查詢可以滿足您的要求。

「選擇」是最大聚合應用的位置。

from payroll In Interview_payrolls 
where payroll.CLIENTCODE = sClientCode 
group payroll By payroll.CLIENTCODE, payroll.EarningsYear, payroll.SSN Into GPayroll = group 
select PayYear = EarningsYear, EarnAmt = GPayroll.Max(Function(p) p.EarningsAmt), HRS = GPayroll.Max(Function(p) p.Hours) 

希望它爲你工作。