[英]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.