Как выполнить поиск в двух или более таблицах, используя объединение с Entity Framework Lambda и Linq - PullRequest
0 голосов
/ 23 октября 2018

Как мне выполнить поиск в двух или более таблицах.

В системе, которую я делаю, у меня есть таблицы Boat, TypeOfBoat и ClassBoat.

Мое сопоставление выглядит следующим образом:

HasRequired(c => c.ClassBoat )
            .WithMany(c => c.Boat)
            .HasForeignKey(c => c.ClassBoatId);

HasRequired(c => c.TypeOfBoat)
            .WithMany(c => c.Boat)
            .HasForeignKey(c => c.TypeOfBoatId);

Я создал общий репозиторий для поиска

    public virtual IEnumerable<TEntity> Search(Expression<Func<TEntity, bool>> predicate)
    {
        return Dbset.Where(predicate);
    }

И я использую общий интерфейсный репозиторий для конкретных поисков лодок, вот несколько примеровниже:

    public IEnumerable<Boat> GetByActive()
    {
        return Search(c => c.Active && !c.excluded);          
    }

    public Boat GetByName(string name)
    {
       return Search(c => c.Name== name).FirstOrDefault();
    }

И если я хочу получить TypeOfBoat и ClassBoat, которые представляют собой разные таблицы, но которые связаны с таблицей Boat, как мне поступить?

Моя идея состоит в том, чтобы показать эти данные в таблице

Вот SS, какова моя база данных.

База данных

1 Ответ

0 голосов
/ 23 октября 2018

Вы имеете в виду, включая связанные записи для лодки?

Попробуйте, если этот запрос даст ожидаемый результат

public Boat GetByName(string name)
{
   var boat = DbContext.Boat
             .Include(boat => boat.ClassBoat)
             .Include(boat => boat.TypeOfBoat)
             .FirstOrDefault(boat => boat.Name == name);

   return boat;
}

Если вы хотите использовать общий репозиторий и затем расширить запрос, вы должны вернуть IQueryable<T> вместо IEnumerable<T>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...