将2个Linq查询合并为1个
给定以下信息,如何将这2个linq查询组合成1个。join语句有点问题 “项目详细信息”只是项目详细信息的列表将2个Linq查询合并为1个,linq,linq-to-sql,Linq,Linq To Sql,给定以下信息,如何将这2个linq查询组合成1个。join语句有点问题 “项目详细信息”只是项目详细信息的列表 项目详细信息(1到多个)PCARD授权 项目详细信息(1到多个)支出详细信息 请注意,我按相同的信息分组,并选择相同类型的信息 var pCardAccount = from c in PCardAuthorizations where projectDetails.Contains(c.ProjectDetail)
项目详细信息(1到多个)PCARD授权
项目详细信息(1到多个)支出详细信息 请注意,我按相同的信息分组,并选择相同类型的信息
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)
};
我认为迈克的建议在这里行不通。这两个查询完全不同,将它们组合到一个查询中只会使其更难阅读
- 对象有不同的类型
- where子句是不同的
- group by子句不同:
new{c.ProjectDetail,c.programmefund}
new{c.ProjectDetails,c.programmefunds}
- select子句是不同的
事实上,没有什么是相同的。我建议保持原样。我认为迈克的建议在这里行不通。这两个查询完全不同,将它们组合到一个查询中只会使其更难阅读
- 对象有不同的类型
- where子句是不同的
- group by子句不同:
new{c.ProjectDetail,c.programmefund}
new{c.ProjectDetails,c.programmefunds}
- select子句是不同的
事实上,没有什么是相同的。我建议您保持原样。您可以在评估它们之前将它们集中在一起
pCardAccount.Concat(expenditures).ToArray()
应该生成一个包含联合的sql语句。至于在你的情况下这是否有什么好处,我不知道。LINQtoSQL也有可能无法为concat生成sql,并在使用时抛出异常。我不确定是什么原因造成的,但我在类似的情况下玩过几次
编辑:我刚刚注意到每个查询中的键都不同。我不确定这是否是一个打字错误,但如果不是,由于类型不同,您将无法对它们进行合并,而且在评估它们之前,将它们合并在一起也没有任何意义
pCardAccount.Concat(expenditures).ToArray()
应该生成一个包含联合的sql语句。至于在你的情况下这是否有什么好处,我不知道。LINQtoSQL也有可能无法为concat生成sql,并在使用时抛出异常。我不确定是什么原因造成的,但我在类似的情况下玩过几次
编辑:我刚刚注意到每个查询中的键都不同。我不确定这是否是一个打字错误,但如果不是,你将无法对它们进行编码,因为它们的类型不同,而且不管怎么说,这也没有任何意义