C# LINQ ускорить проверку листа внутри листа

У меня есть 2 модели House/Owner и связь Многие ко многим (отдельная модель получается) HouseToOwner.

В HouseToOwner условно прописываются только Idшники дома и владельца (чтоб у дома было неск владельцев, а у владельца — неск домов).

Написал linq на поиск тех домов, которые есть у владельца:

        houses = houses.Where(x => x.HouseToOwner.Any(y => y.Owner.FIO.StartsWith("Вася"))).ToList();

Он срабатывает, но довольно долго (около 3-6сек. В бд примерно 300 домов и столько же владельцев +-).

Можно ли как то оптимизировать Linq запрос?


Ответы (1 шт):

Автор решения: Nikita Plesovskikh

Попробуйте использовать JOIN вместо IN:

var foundHouses =
    (from house in houses
    join houseToOwner in houseToOwners on house equals houseToOwner.House
    join owner in owners on houseToOwner.Owner equals owner
    where owner.Name.StartsWith(searchString)
    select house).ToList();
→ Ссылка