2010-05-10 3 views
1

Учитывая следующую информацию, как я могу объединить эти 2 запроса linq в 1. Имея немного проблем с операцией объединения.Объединение 2 запросов Linq в 1

«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) 
        }; 

ответ

3

Я не думаю, что предложение Майка будет работать здесь. Эти два запроса достаточно различны, что объединение их в один запрос просто затруднит чтение.

  • Объекты имеют разные типы.
  • В каких статьях разные.
  • группа по п отличается:
    • new { c.ProjectDetail, c.ProgramFund }
    • new { c.ProjectDetails, c.ProgramFunds }
  • Отборные положения различны.

Фактически, на самом деле не существует ничего общего. Я бы рекомендовал оставить его как есть.

2

Вы можете всегда просто контактировать их вместе, прежде чем оценивать их.

pCardAccount.Concat(expenditures).ToArray() 

должен сгенерировать единую инструкцию с объединением. Что касается того, есть ли какая-то польза от этого в вашей ситуации, я не знаю. Также существует вероятность того, что linq-to-sql не сможет генерировать SQL для concat и будет генерировать исключение всякий раз, когда вы его используете. Я не уверен, что его вызывает, но я видел это несколько раз, когда я играл в подобной ситуации.

Редактировать: Я заметил, что ваши ключи различаются в каждом запросе. Я не уверен, что это опечатка или нет, но если это не так, вы не сможете их согласовать из-за разных типов, и в любом случае это не имеет никакого смысла.