Jak pobrać child element razem z parentem

0

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ć.

1

Ostatnie SelectMany zamieniasz na:

.SelectMany(s => s.IncomesOrExpenditures.Select(ie => new { ie.Amount, ie.Comment, ie.Date, ie.Id, MemberName = s.Name }));

kolejny kawałek, praktycznie niezmieniony:

     IEnumerable<IncExpViewModel> viewModels = allIncExpList
                .Select(ie => new IncExpViewModel()
                {
                    Amount = ie.Amount,
                    Comment = ie.Comment,
                    Id = ie.Id,
                    CreatedDate = ie.Date,
                    MemberName = ie.MemberName
                });

1 użytkowników online, w tym zalogowanych: 0, gości: 1