Суб-выбор с использованием LinqToExcel - PullRequest
1 голос
/ 04 февраля 2012

Я пытаюсь выяснить, как выполнить подвыбор с помощью Linq.У меня есть лист Excel с колонкой «дебет» и «кредит».Мне нужно отфильтровать все строки, которые имеют значение столбца дебетования (> 0,00), которое соответствует значению столбца кредита дальше вниз.Обе строки должны иметь одинаковый идентификатор плательщика.Вот что я придумал до сих пор:

    public void balanceSheet()
    {
        foreach (Payment payment in this.payments)
        {
            // c[6] is the payers ID.
            var debits = from c in this.test.WorksheetNoHeader()
                         where c[6] != "0" && c[13] != "0.00" 
                         select c;
            // Find any rows in the sheet that have the same payer id AND the debit 
            // amount from the query above in it's credit column.
            foreach(LinqToExcel.RowNoHeader debit in debits)
            {
                var credits = from c in this.test.WorksheetNoHeader()
                              where c[6] == debit[6] && c[15] == debit[13]
                              select c;

                // Do something awesome if it finds something.

            }
        }
    }

Я надеюсь, что есть более элегантное решение для выбора строк Excel по критериям, указанным выше, а не для их циклического просмотра каждый раз.Я не думаю, что использую LINQ, чтобы использовать его в полной мере.Есть идеи?

Ответы [ 2 ]

2 голосов
/ 05 февраля 2012

LinqToExcel не поддерживает объединения, но вы можете преобразовать его в список в памяти и затем выполнить объединение

var credits = from credit in this.test.WorksheetNoHeader().ToList()
  join debit in this.test.WorksheetNoHeader().ToList() on credit[6] equals debit[6]
  where debit[13] != "0.00"
  where debit[13] == credit[15]
  select credit
1 голос
/ 04 февраля 2012

Попробуйте присоединиться:

var credits = from credit in this.test.WorksheetNoHeader()
  join debit in this.test.WorksheetNoHeader() on credit[6] equals debit[6]
  where debit[13] != "0.00"
  where debit[13] == credit[15]
  select credit

Для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/bb311040.aspx

...