这是表达式
x => x.stf_Category.CategoryID == categoryId
x指的是包含类别的产品实体。我正在尝试加载与给定categoryId匹配的所有产品。
在db中,Product表包含对Category的外键引用(通过CategoryId)。
问题:我认为我做错了。在EF4中是否还有其他事情要创建这种类型的LINQ表达式?
那里有EF4 Linq表达的好例子吗?特别是根据我的问题等相关实体进行查询的内容?
谢谢!
答案 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
您不需要加入也不需要加载。