EF 4 LINQ表达式基于相关实体加载项

时间:2010-09-20 03:07:59

标签: linq lambda entity-framework-4

这是表达式

x => x.stf_Category.CategoryID == categoryId

x指的是包含类别的产品实体。我正在尝试加载与给定categoryId匹配的所有产品。

在db中,Product表包含对Category的外键引用(通过CategoryId)。

问题:我认为我做错了。在EF4中是否还有其他事情要创建这种类型的LINQ表达式?

那里有EF4 Linq表达的好例子吗?特别是根据我的问题等相关实体进行查询的内容?

谢谢!

2 个答案:

答案 0 :(得分:1)

您正在寻找包含方法。

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

这通常被称为急切加载

实体框架将根据您指定的映射“推断”JOIN约束。

“魔术字符串”需要与EDMX上的实体集名称匹配。

查看this帖子了解详情。

修改

我对您是否需要产品和类别,或者只是具有特定类别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就可以了。

答案 1 :(得分:0)

如果您使用EF4并且已在模型中选择并定义了类别和产品类之间的关联,则可以选择具有特定类别ID的所有产品,如下所示:

x => x.CategoryID == categoryID

您不需要加入也不需要加载。