EF 4 LINQ Expression загружает элементы на основе связанной сущности - PullRequest
0 голосов
/ 20 сентября 2010

Вот выражение

x => x.stf_Category.CategoryID == categoryId

x относится к объекту продукта, который содержит категорию.Я пытаюсь загрузить все продукты, которые соответствуют данной категории.

В БД таблица Product содержит ссылку на внешний ключ для Category (через CategoryId).

Вопрос: Я думаю, что я делаю это неправильно.Есть ли что-то еще, что нужно сделать в EF4, чтобы создать выражение LINQ этого типа?

Есть ли хорошие примеры выражений EF4 Linq?В частности, что-то, что запрашивает на основе связанных сущностей, таких как моя проблема?

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

Вы ищете метод Включить .

var query = db.Products.Include("Categories");

Это обычно называется нетерпеливая загрузка .

Entity Framework будет «выводить» ограничение JOIN на основе указанного вами сопоставления.

«Волшебная строка» должна соответствовать имени набора сущностей на вашем EDMX.

Проверьте этот пост для получения дополнительной информации.

EDIT

Я немного сбит с толку относительно того, хотите ли вы Продукты и Категории или только продукты, которые имеют определенный ID категории.

Если последнее, то это путь:

var query = from p in db.products
            join c in db.categories
            on p.CategoryId equals c.CategoryId
            where c.CategoryId == someCategoryId
            select p;

Имейте в виду, что приведенный выше запрос в точности совпадает с исходным запросом.

Если p является продуктом, то p.Categories будет искать Навигационное свойство вашей сущности продукта на EDMX, в этом случае это будет ваша категория FK.

Пока вы правильно настраиваете навигационные свойства, с p.Categories все в порядке.

0 голосов
/ 20 сентября 2010

Если вы используете EF4, и связь между категориями «Категория» и «Продукт» была обнаружена и определена в вашей модели, тогда все продукты с определенным идентификатором категории могут быть выбраны просто:

x => x.CategoryID == categoryID

Выдля этого не нужно ни присоединяться, ни загружаться.

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