鉴于以下信息,我如何将这两个linq查询合并为1.在join语句中遇到一些麻烦。
'projectDetails'只是ProjectDetails的列表
ProjectDetails(1对多)PCardAuthorizations
ProjectDetails(1到多个)ExpenditureDetails
注意我正在使用相同的信息进行分组并选择相同类型的信息
var pCardAccount = from c in PCardAuthorizations
where projectDetails.Contains(c.ProjectDetail)
&& c.RequestStatusId == 2
group c by new { c.ProjectDetail, c.ProgramFund } into g
select new { Key = g.Key, Sum = g.Sum(x => x.Amount) };
var expenditures = from d in ExpenditureDetails
where projectDetails.Contains(d.ProjectDetails)
&& d.Expenditures.ExpenditureTypeEnum == 0
group d by new { d.ProjectDetails, d.ProgramFunds } into g
select new {
Key = g.Key,
Sum = g.Sum(y => y.ExpenditureAmounts.FirstOrDefault(a => a.IsCurrent && !a.RequiresAudit).CommittedMonthlyRecords.ProjectedEac)
};
答案 0 :(得分:3)
我不认为迈克的建议会在这里奏效。这两个查询是完全不同的,将它们组合成一个查询只会使它更难阅读。
new { c.ProjectDetail, c.ProgramFund }
new { c.ProjectDetails, c.ProgramFunds }
实际上并没有什么是相同的。我建议保持原样。
答案 1 :(得分:2)
在评估它们之前,你总是可以将它们连在一起。
pCardAccount.Concat(expenditures).ToArray()
应生成带有union的单个sql语句。至于在你的情况下是否有任何好处,我不知道。 linq-to-sql也有可能无法为concat生成SQL,并且无论何时使用它都会抛出异常。我不确定是什么原因造成的,但是当我在类似情况下玩耍的时候,我已经看过几次了。
编辑:我刚注意到每个查询中的密钥都不同。我不确定这是否是一个错字,但如果不是,你将无法通过不同的类型连接它们,无论如何它都没有任何意义