Операции LINQ над лямбда-группировкой - PullRequest
1 голос
/ 06 апреля 2009

Я застрял в группе LINQ, пытаясь решить ее без использования оператора foreach, вот пример:

У меня есть две общие коллекции List<OrderHeader> и List<OrderDetail>, обе имеют одно и то же поле TOTRGVS, которое содержит общую сумму из заказа, а номер заказа - это ключ с именем NDORGV.

Затем я хочу найти «Заказы, которые не имеют одинаковые TOTRGVS в OrderHeader и OrderDetail», поэтому я попытался выполнить следующий запрос:

 List<RGVCAFAC_ERRORES> diff = (from d in lstOrderDetail 
                               join c in lstOrderHeader on d.NDORGV equals c.NDORGV                                                     
                               group d by d.NDORGV into g
                               let difTOTOrderDetail = g.Select(p => p.TOTRGVS).Sum()
                               let difTOTOrderHeader = g.Key.????
                               let diffTOT = difTOTOrderHeader - difTOTOrderDetail
                               where diffTOT != 0
                               select new _ERRORS
                               {
                                   NDORGV = g.Key,
                                   IMPORT = diffTOT
                               }
  ).ToList();

in difTOTOrderHeader Я не знаю, как извлечь поле TOTRGVS из OrderHeader. Я пытался использовать ключ, но не могу получить никакого поля, только расширения для методов форматирования.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2009

Это может помочь:

var dictDetails = lstOrderDetail
  .GroupBy(d => d.NDORGV)
  .ToDictionary(g => g.Key, g => g.Sum(d => d.TOTRGVS));

var result = lstOrderHeader
  .Where(h => dictDetails[h.NDORGV] != h.TOTRGVS)
  .ToList();
1 голос
/ 06 апреля 2009

Функция Except обычно используется для определения различий в списках.

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