Присоединиться к 2 спискам с помощью LINQ? - PullRequest
4 голосов
/ 29 декабря 2010

Я не уверен в том, как лучше обойти это. Просто запросы LINQ достаточно просты для меня, но я ищу наиболее эффективный способ здесь.

У меня есть 2 таблицы, Slider и SliderItems. У SliderItems есть FK, который указывает на идентификатор ползунка.

Я получаю информацию о конкретном слайдере, например:

    public static List<Slider> GetSlider(Slider sItem)
    {
        DBContext db = new DBContext();

        if (sItem.Id != Guid.Empty)
        {
            var list = from tbl in db.Sliders
                       where tbl.Id == sItem.Id
                       orderby tbl.Id
                       select tbl;

            return list.ToList();
        }
    }

Так что мне нужно сделать для моей домашней страницы набор данных, которые я хочу добавить в список данных. Тем самым комбинируя Slider + SliderItems, которые идут вместе с ним.

Должен ли я просто выполнить обычный запрос LINQ с помощью оператора JOIN и выбросить их в общий список, который восходит к моему списку данных?

Цените любые мысли и указания.

Ответы [ 3 ]

1 голос
/ 26 января 2011

Если в вашей базе данных уже есть отношение внешнего ключа между Sliders и SliderItems и если ваша модель LINQ-to-SQL включает в себя и Sliders, и SliderItems, то поиск Slider автоматически извлекает все связанные SliderItems:

public static IEnumerable<SliderItems> GetSliderItems(Guid sliderId)
{
    using (DataContext dc = new DataContext())
    {
        Slider result = dc.Sliders.Single(s => s.Id == sliderId);

        return result.SliderItems;
    }
}
0 голосов
/ 30 декабря 2010

Я полагаю, вы можете использовать запрос Linq с объединением и поместить данные в список. Это хорошо работает для вас.

0 голосов
/ 29 декабря 2010

Кажется, все в порядке, но вы отметили свой вопрос как ASP.Net.У меня вопрос к вам, насколько велик этот список и как часто вы отображаете эту страницу?

Если вы часто его отображаете, и он не слишком большой, я бы перетащил таблицу слайдеров в память, а затемВыполните запрос, не нажимая на БД.

На самом деле, если это возможно, вы бы кэшировали весь слайдер и слайдримы, если могли.

Даже если вы кэшируете последние использованные файлы, если это имеет смыслПриложение, не обращаясь к БД, даст вам лучшее увеличение производительности, чем оптимизация, которая кажется очень тривиальным отношением родитель / ребенок.Я полагаю, у вас есть индекс в базе данных вниз tbl.Id?

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