2010-01-11 95 views
0

我在執行一個Linq查詢與C#項目中的group by子句有一些問題。 這裏以下查詢:Linq問題與分組條款

var items = (
    from controlForm in dataContext.ControlForms 
     join controlFormStatus 
      in dataContext.ControlFormStatus 
      on controlForm.FK_ControlFormStatus equals controlFormStatus.Id 
     join docCheck 
      in dataContext.DocumentChecks 
      on controlForm.Id equals docCheck.FK_ControlForm 
     join checkResult 
      in dataContext.CheckResults 
      on docCheck.FK_CheckResult equals checkResult.Id 

    where controlForm.FK_ControlCycle.ToString().Equals(controlCycleId) 
      & controlFormStatus.Description.Equals(Constants) 
      | Description.Equals(Constants.ControlFormStatusApprovalProcessOwner)) 

    group controlForm by 
      new (controlForm.Id, 
      controlForm.FK_ControlCycle, 
      controlForm.FK_SampleNode, 
      controlForm.FK_Control, 
      controlForm.TestExecutor, 
      controlForm.FK_ControlFormStatus) 

    into ctrlForm 

    select 
     new ControlFormReportPartialResults(
      ctrlForm.Key.Id, 
      ctrlForm.Key.FK_ControlCycle, 
      ctrlForm.Key.FK_SampleNode, 
      ctrlForm.Key.FK_Control, 
      ctrlForm.Key.TestExecutor, 
      ctrlForm.Key.FK_ControlFormStatus , 
      3/2) 
); 

我希望查詢將在一個更好的風格的頁面打印出來比我此刻:(看到 無論如何,我需要ControlFormReportPartialResults的構造函數來獲取所有在我的Fileds GROUP BY子句中選擇,但它給了我預期的錯誤類型。

任何幫助非常感謝。

問候,

達里奧

回答

3

假設查詢的其餘部分是正確的,您的問題僅僅是您的group by子句中的語法問題(特別是使用new運算符創建匿名類型)。你正在使用parens,但應該使用大括號。這應該是訣竅:

var items = (
    from controlForm in dataContext.ControlForms 
     join controlFormStatus 
      in dataContext.ControlFormStatus 
      on controlForm.FK_ControlFormStatus equals controlFormStatus.Id 
     join docCheck 
      in dataContext.DocumentChecks 
      on controlForm.Id equals docCheck.FK_ControlForm 
     join checkResult 
      in dataContext.CheckResults 
      on docCheck.FK_CheckResult equals checkResult.Id 

    where controlForm.FK_ControlCycle.ToString().Equals(controlCycleId) 
      & controlFormStatus.Description.Equals(Constants) 
      | Description.Equals(Constants.ControlFormStatusApprovalProcessOwner)) 

    group controlForm by 
      new {controlForm.Id,  /*updated*/ 
      controlForm.FK_ControlCycle, 
      controlForm.FK_SampleNode, 
      controlForm.FK_Control, 
      controlForm.TestExecutor, 
      controlForm.FK_ControlFormStatus} 

    into ctrlForm 

    select 
     new ControlFormReportPartialResults(
      ctrlForm.Key.Id, 
      ctrlForm.Key.FK_ControlCycle, 
      ctrlForm.Key.FK_SampleNode, 
      ctrlForm.Key.FK_Control, 
      ctrlForm.Key.TestExecutor, 
      ctrlForm.Key.FK_ControlFormStatus , 
      3/2) 
); 
+0

+1你有犀利的眼睛! – Abel 2010-01-11 16:11:49