2015-06-16 2 views
1

У меня возникли проблемы с созданием оператора linq, который захватил бы самую последнюю транзакцию, которая была до указанной даты начала. Интересно, может ли кто-нибудь помочь мне.Схват последней транзакции/записи

Например, startdate is January 20st.

Id LoanId TransactionDate InterestDate Balance 
1  5   January 5  January 3  5000 
1  5   January 30  January 5  10000 
2  5   January 22  January 22  4000 
3  6   January 3  January 1  2000 

Я должен иметь список ниже

Id LoanId TransactionDate InterestDate Balance 
1  5   January 5  January 3  5000 
3  6   January 3  January 1  2000 

У меня возникли проблемы с помощью группировки и захватывая правильные значения.

var transactions = ctx.Transactions.Where(x => x.Date <= startDate) 
        .GroupBy(x => x.LoanId) 
        .Select(x => new TransactionDTO 
        { 
         LoanId = ... 
         TransactionDate = ... 
         InterestDate = .... 
         Balance = ... 
        }); 
+3

Давайте посмотрим запрос у вас возникли проблемы с, пожалуйста, , Является ли этот Linq для SQL или Linq для объектов или ...? Является ли TransactionDate объектом DateTime? –

ответ

1

Один из способов будет фильтрации по startDate, группировка по ID, заказ на date, и схватив первый элемент группы:

var res = tx 
    .Where(tx => tx.TransactionDate <= startDate) 
    .GroupBy(tx => tx.Id) 
    .Select(g => g.OrderBy(tx => tx.Date).First()); 
+0

Это сработало чудесно, только подумайте, что это должен быть OrderByDescending. – Master

+0

Где указано. Перед() определено? –

+0

@ StephenKennedy Я не видел изменения с кодом OP, поэтому я предложил псевдокод-иш способ показать концепцию. Спасибо за комментарий! – dasblinkenlight

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