繁体   English   中英

Linq问题与group by子句

[英]Linq problem with group by clause

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

我希望查询将以比目前所看到的更好的样式打印在页面中:(。无论如何,我需要将我在group by子句中选择的所有文件都放入ControlFormReportPartialResults的构造函数中,但是它给出了我期望的错误类型。

任何帮助都非常感谢。

问候,

达里奥

假设其余查询正确,那么您的问题只是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)
 );

暂无
暂无

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

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