EF LINQ - agregacja danych z tabeli

0

Hej,

Takie zagadnienie - od frontu dostaję słownik <int, bool> gdzie klucz oznacza Id konta, a wartość decyduje, czy dane związane z tym kontem mają się znaleźć w zapytaniu. Można temat rozwiązać na dwa sposoby - albo jednym zapytaniem do bazy, albo porobić ileś tam zapytań i połączyć wyniki w jedną listę. Na obu niestety "poległem". Pierwsza próba:

 var c = _context.Budgets.Where(c => c.Month >= pars.DateFrom && c.Month <= pars.DateTo);
            foreach (var a in pars.SelectedAccounts)
                if (a.Value)
                    c = c.Where(d => d.IdAccount == a.Key);
            return c.ToList();

Niestety w ten sposób utworzyła się kwerenda z operatorami AND, a jak wiadomo zmienna nie może jednocześnie przyjąć różnych wartości, zatem dostałem pusty ciąg. No to zrobiłem inaczej:

 List<Budget> budgets = new List<Budget> { };

            foreach (var a in pars.SelectedAccounts)
            {
                if (a.Value == true)
                {
                    var c = _context.Budgets.Where(c => c.Month >= pars.DateFrom && c.Month <= pars.DateTo)
                        .Where(d => d.IdAccount == a.Key)
                        .ToList();
                    budgets.Concat(c);
                }
            }
            return budgets;
        }

Ale mimo, że każde zapytanie się wykonuje poprawnie, to list łączyć nie chce... Gdzie błądzę?

2

A dlaczego nie jakoś tak?

var accountIds = pars.SelectedAccounts.Where(x => x.Value).Select(x => x.Key);
_context.Budgets.Where(c => ... && accountIds.Contains(c.IdAccount));
0

@kal800: Dzięki wielkie, jeszcze się nieporadnie niestety po tym poruszam... 🍺

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