查询与Entity Framework和.NET 3.5的多对多关系

时间:2011-03-26 20:16:01

标签: linq entity-framework linq-to-entities many-to-many

我的问题实际上是双重的。首先,我对EF很陌生,但我早先使用快捷方式已经成功地使用了它。虽然,对于这个特定的项目,我打算花时间学习。

此时我所拥有的是一个非常简单的数据库结构:

Post
===================
Id     Title
-------------------
 1     Hello world
 2     Foo bar baz

Tag
===================
Id     Title
-------------------
 6     test
 7     todo

PostTags
===================
PostId     TagId
-------------------
     1         6
     1         7
     2         7

使用EF,它会生成一个包含两个实体的模型:发布标记

我想要完成的任务:

我正在尝试使用tagIds数组(例如6和7)查询所有帖子的模型。但是,我无法弄清楚我需要做些什么来完成这项工作。 以前我欺骗的方式是我将自动增量PK添加到映射表(BlogPosts)并将其添加到EF模型中,但它更像是一个丑陋的黑客以便向前推进。我宁愿在这次学习如何做到这一点。

1 个答案:

答案 0 :(得分:1)

这适用于EFv4。在EFv1中尝试:

var tagIds = new int[] { 6, 7 };
var query = context.Tags
                   .Where(t => tagIds.Contains(t.Id))
                   .SelectMany(t => t.Posts);

编辑:

我检查了它,并且在EFv4中添加了集值参数+ Contains,因此上面的示例在EFv1中不起作用。 This thread in MSDN forum提供了解决方法以允许EFv1中的IN运算符。另一个推荐的解决方法是简单地升级到EFv4,因为还有许多其他改进,包括性能的显着改进。