2013-12-20 3 views
2

У меня есть следующий код, который получает мне один набор результатов, а затем другой (resultsSetup), который точно такой же, на основе того, выполняется ли условие.Добавление двух запросов Lambda/Linq вместе

// use Linq to query the downtime data 
var results = from t in this.MachineEvent.Transactions.OfType<Logic.DowntimeScrapTransaction>() 
       where t.TransactionType == Logic.Enums.MachineEventTransactionType.DowntimeScrapTransaction 
       group t by t.Reason.Group into grps 
       let totalDowntime = grps.Sum(g => g.DowntimeDuration.TotalMinutes) 
       orderby totalDowntime descending 
       select new { Key = grps.Key, values = grps, TotalDownTime = grps.Sum(g => g.DowntimeDuration.TotalMinutes) }; 


if (this.MachineEvent.MachineState == Logic.Enums.MachineState.Production) 
{ 
    var resultsSetup = from t in this.MachineEvent.GetSetupMachineEvent().Transactions.OfType<Logic.DowntimeScrapTransaction>() 
         where t.TransactionType == Logic.Enums.MachineEventTransactionType.DowntimeScrapTransaction 
         group t by t.Reason.Group into grps 
         let totalDowntime = grps.Sum(g => g.DowntimeDuration.TotalMinutes) 
         orderby totalDowntime descending 
         select new { Key = grps.Key, values = grps, TotalDownTime = grps.Sum(g => g.DowntimeDuration.TotalMinutes) }; 

    results.Concat(resultsSetup); 
    results.Union(resultsSetup); 
} 

То, что я пытаюсь сделать, - это просто объединить эти два результата вместе. Как вы можете видеть, я пробовал метод Concat и Union, который у меня тоже не имеет успеха.

+0

ли 'Union' работа на анонимные типы? – germi

+1

Фактически вам нужно сохранить * результат * 'Concat' или' Union' в переменной. Они оба возвращают новый запрос, они не меняют ни входной запрос. (@germi Да, это волшебство :)) – Rawling

+0

@ Rawling Это ... приятно. Не знал этого. – germi

ответ

3

Как вы можете видеть, я пробовал метод и Union, который у меня не имеет успеха.

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

results = results.Concat(resultsSetup); 

, если вы хотите, чтобы добавить все элементы resultsSetup к results или

results = results.Union(resultsSetup); 

, если вы хотели бы получить союз (т.е. удалить все дубликаты).

+0

Упс может сказать, что его почти Рождество просто не могло его увидеть. Спасибо! –

1

Я думаю, что вы хотите сказать:

results = results.Concat(resultsSetup); 
1

Попробуйте это ...

results = results.Union(resultsSetup); 
Смежные вопросы