简体   繁体   English

Linq问题与group by子句

[英]Linq problem with group by clause

I have some problems in executing a Linq query with the group by clause in a C# project. 我在C#项目中使用group by子句执行Linq查询时遇到一些问题。 Here following the query: 下面是查询:

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

I hope the query will be printed out in the page in a better style than I am seeing at the moment :(. Anyway I need to get in the constructor of ControlFormReportPartialResults all the fileds I have selected in the group by clause, but it gives me an error type expected. 我希望查询将以比目前所看到的更好的样式打印在页面中:(。无论如何,我需要将我在group by子句中选择的所有文件都放入ControlFormReportPartialResults的构造函数中,但是它给出了我期望的错误类型。

Any help is really appreciated. 任何帮助都非常感谢。

Regards, 问候,

Dario 达里奥

Assuming that the rest of the query is correct, your issue is just a syntax problem in your group by clause (specifically using the new operator to create an anonymous type). 假设其余查询正确,那么您的问题只是group by子句中的语法问题(特别是使用new运算符创建匿名类型)。 You're using parens, but curly braces should be used. 您正在使用括号,但应使用花括号。 This should do the trick: 这应该可以解决问题:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM