我有三个表,用户,产品和说明。用户和产品之间存在多对多的关系,以及产品和指令之间的多对多关系。
我需要获取特定用户可以看到的所有说明,即每个连接到用户的产品的每条指令。
我想使用方法语法并使用导航属性来避免连接。所以一开始我正在为用户抓取产品,然后对说明进行选择,如下:
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();
谁能告诉我我做错了什么?不应该选择创建相关条目的列表而不是列表列表,这是无用的吗?
答案 0 :(得分:0)
您所缺少的只是Many
:
Products.Where(product => product.User.Any(user => user.ID == id))
.SelectMany(product => product.Instructions).ToList();
SelectMany
基本上是Select
,但它也会使序列变得扁平化。