【问题标题】:Linq problem with group by clause使用 group by 子句的 Linq 问题
【发布时间】:2011-01-03 19:38:29
【问题描述】:

我在 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 的构造函数中获取我在 group by 子句中选择的所有文件,但它给了我一个预期的错误类型。

非常感谢任何帮助。

问候,

达里奥

【问题讨论】:

    标签: c# linq group-by


    【解决方案1】:

    假设查询的其余部分是正确的,您的问题只是 group by 子句中的语法问题(特别是使用 new 运算符创建匿名类型)。您正在使用括号,但应该使用花括号。这应该可以解决问题:

    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)
     );
    

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      相关资源
      最近更新 更多