Объединение 2 запросов Linq в 1 - PullRequest
1 голос
/ 11 мая 2010

Учитывая следующую информацию, как я могу объединить эти 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)
                    };

Ответы [ 2 ]

3 голосов
/ 11 мая 2010

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

  • Объекты имеют разные типы.
  • Предложения where отличаются.
  • Предложение group by отличается:
    • new { c.ProjectDetail, c.ProgramFund }
    • new { c.ProjectDetails, c.ProgramFunds }
  • Предложения выбора отличаются.

На самом деле нет ничего такого же. Я бы рекомендовал оставить все как есть.

2 голосов
/ 11 мая 2010

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

pCardAccount.Concat(expenditures).ToArray()

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...