2010-01-11 98 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