将2个Linq查询合并为1个

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

给定以下信息,如何将这2个linq查询组合成1个。join语句有点问题

“项目详细信息”只是项目详细信息的列表
项目详细信息(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,并在使用时抛出异常。我不确定是什么原因造成的,但我在类似的情况下玩过几次

编辑:我刚刚注意到每个查询中的键都不同。我不确定这是否是一个打字错误,但如果不是,你将无法对它们进行编码,因为它们的类型不同,而且不管怎么说,这也没有任何意义