多对多关系,选择没有连接的相关元素

时间:2013-06-10 15:08:04

标签: sql database linq select many-to-many

我有三个表,用户,产品和说明。用户和产品之间存在多对多的关系,以及产品和指令之间的多对多关系。

我需要获取特定用户可以看到的所有说明,即每个连接到用户的产品的每条指令。

我想使用方法语法并使用导航属性来避免连接。所以一开始我正在为用户抓取产品,然后对说明进行选择,如下:

Products.Where(product => product.User.Any(user => user.ID == id))
        .Select(product => product.Instructions).ToList();

但是,这不会返回List<Instruction>而是返回List<IEnumerable<Instruction>>,从而引发编译器错误“无法隐式转换类型...”。

我也尝试过:

Products.Where(product => product.User
        .Contains(User.Where(user => user.ID == id).First()))
    .Select(product => product.Instructions).ToList();

但是我得到了相同的结果。即使没有where子句,我也会得到相同的

Products.Select(product => product.Instructions).ToList();

谁能告诉我我做错了什么?不应该选择创建相关条目的列表而不是列表列表,这是无用的吗?

1 个答案:

答案 0 :(得分:0)

您所缺少的只是Many

Products.Where(product => product.User.Any(user => user.ID == id))
        .SelectMany(product => product.Instructions).ToList();

SelectMany基本上是Select,但它也会使序列变得扁平化。