Jak pobrać child element razem z parentem

Odpowiedz Nowy wątek
2014-12-12 15:46
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ć.

Moja propozycja to: IncomeOrExpenditure => Transaction; List&lt;IncomeOrExpenditure&gt;() => AccountStatement lub BudgetStatement. :P - DibbyDum 2014-12-12 18:50
I tak zrobię, dzięki. - dam1an 2014-12-12 19:48

Pozostało 580 znaków

2014-12-12 18:33

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
                });
Słitaśnie, dzięki :P - dam1an 2014-12-12 19:47

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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