Przejmuję kontrolę nad kodem struktury encji i zamierzam go zmienić. Zanim to zrobię, chciałbym sprawdzić, czy moje myśli są poprawne i nie brakuje mi ramowego sposobu robienia rzeczy.Refaktoryzacja warstwy danych
Przykład 1 - Podkwerenda vs Dołącz
Tutaj mamy jeden-do-wielu między As i pensjonatów. Oprócz tego, że poniższy kod jest trudny do odczytania, czy jest on również nieefektywny?
from a in dataContext.As
where ((from b in dataContext.Bs
where b.Text.StartsWith(searchText)
select b.AId).Distinct()).Contains(a.Id)
select a
Czy lepiej byłoby na przykład skorzystać z łączenia i zrobić coś takiego?
from a in dataContext.As
where a.Bs.Any(b => b.Text.StartsWith(searchText))
select a
Przykład 2 - Jednoznaczne przyłącza vs widoku
Mamy tu jeden-do-wielu między As i B i jeden-do-wielu między B i Cs.
from a in dataContext.As
join b in dataContext.Bs on b.AId equals a.Id
join c in dataContext.Cs on c.BId equals b.Id
where c.SomeValue equals searchValue
select a
Czy istnieje dobry powód, by używać jawnych połączeń zamiast nawigować przez model danych? Na przykład:
from a in dataContext.As
where a.Bs.Any(b => b.Cs.Any(c => c.SomeValue == searchValue)
select a
Dzięki za poświęcenie czasu na odpowiedź. – Joey