Tak wygląda model:
public class Budget
{
public Budget()
{
Members = new List<Member>();
}
public int Id { get; set; }
public string BudgetName { get; set; }
public string OwnerName { get; set; }
public DateTime CreatedTime { get; set; }
public List<Member> Members { get; set; }
}
public class Member
{
public Member()
{
IncomesOrExpenditures = new List<IncomeOrExpenditure>();
}
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedTime { get; set; }
public List<IncomeOrExpenditure> IncomesOrExpenditures { get; set; }
}
public class IncomeOrExpenditure //gdyby ktoś miał pomysł jak inaczej to nazwać było by fajnie
{
public int Id { get; set; }
public Decimal Amount { get; set; }
public DateTime Date { get; set; }
public string Comment { get; set; }
}
Dla konkretnego budgetu chce wyświetlić listę wszystkich IncomeOrExpenditure
razem z Member
Tworzę ViewModel:
public class IncExpViewModel
{
public int Id { get; set; }
public Decimal Amount { get; set; }
public string Comment { get; set; }
public string MemberName { get; set; }
public DateTime CreatedDate { get; set; }
}
I wrzucam to co potrafię wrzucić do ViewModelu, brakuje mi tylko MemberName. Jak to pobrać?
var allIncExpList = db.Budgets
.Include(b => b.Members)
.Where(e => e.OwnerName == User.Identity.Name)
.SelectMany(b => b.Members)
.Include(m => m.IncomesOrExpenditures)
.SelectMany(s => s.IncomesOrExpenditures);
IEnumerable<IncExpViewModel> viewModels = allIncExpList
.Select(ie => new IncExpViewModel()
{
Amount = ie.Amount,
Comment = ie.Comment,
Id = ie.Id,
CreatedDate = ie.Date
});
return View(viewModels);
Mógłbym dać propertkę Member
w IncomeOrExpenditure
ale wcześniej gdzieś @somekind pisał że lepiej tak nie robić.