2010-09-07 2 views
0

У меня есть два запроса, которые я объединяю в Linq, например;Манипулировать вывод Linq

var reWorkData = from a in db.IV30300s 
          join b in db.IV00101s on a.ITEMNMBR equals b.ITEMNMBR into t1 
          from b1 in t1.DefaultIfEmpty() 
          join c in db.IV30200s on a.DOCTYPE equals c.IVDOCTYP into t2 
          from c1 in t2.Where(c => a.DOCNUMBR == c.DOCNUMBR).DefaultIfEmpty() 
          where a.TRXLOCTN.ToUpper() == "QA" && 
          a.DOCTYPE == 1 && 
          (a.DOCDATE >= start && a.DOCDATE <= end) && 
          a.TRXQTY > 0 
          select new { A = a, B = b1 }; 

      var newBuildData = from a in db.IV30300s 
           join b in db.IV00101s on a.ITEMNMBR equals b.ITEMNMBR into t1 
           from b1 in t1.DefaultIfEmpty() 
           join c in db.IV30200s on a.DOCTYPE equals c.IVDOCTYP into t2 
           from c1 in t2.Where(c => a.DOCNUMBR == c.DOCNUMBR).DefaultIfEmpty() 
           where a.TRXLOCTN.ToUpper() == "PRODUCTION" && 
           a.TRNSTLOC.ToUpper() == "QA" && 
           a.DOCTYPE == 3 && 
           (a.DOCDATE >= start && a.DOCDATE <= end) && 
           a.TRXQTY > 0 
           select new { A = a, B = b1 }; 

      var rawData = reWorkData.Union(newBuildData); 

Что я тогда нужно сделать, это выполнить часть логики проверки на a.ITEMNMBR и изменить его значение в зависимости от результата. Затем это будет использоваться для группировки элементов вместе.

Это просто случай итерации через что-то, выполнение логики, а затем внесение изменений?

ответ

0

Это просто случай итерации через что-то, выполнение логики, а затем внесение изменений?

В принципе, да, это сработает. Тем не менее, я бы рекомендовал изменить свою последнюю строку:

var rawData = reWorkData.Union(newBuildData).ToList(); 

Это заставит Союз в полной мере оценить, что позволяет сделать ваши изменения, и сделать свою группировку (что может потребовать второй итерации, и т.д.) , не вызывая множественных оценок вашего Союза, или вызывая нечетное, потенциально неожиданное поведение.

Кроме того, если данные уже хранятся в базе данных, вероятно, было бы более эффективно попытаться выполнить логику на сервере (как часть самого запроса) и соответствующим образом вывести данные. Это может, возможно, уменьшить количество данных, выведенных через провод (сначала может произойти «группировка») и обработка, выполняемая на клиенте.

0

Это просто случай итерации через что-то, выполнение логики, а затем внесение изменений?

Да, но если ваши данные помещены в базу данных SQL, может оказаться гораздо более эффективным создание сценария SQL для выполнения того, что вы хотите. Реляционные базы данных действительно хороши при выполнении операций на больших наборах. Вытягивание данных клиенту и обновление записей по одному может быть намного медленнее.

Смежные вопросы