0

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

我需要获取允许特定用户查看的所有说明,即连接到用户的每个产品的每个说明。

我想使用方法语法并利用导航属性来避免连接。因此,首先我为用户获取产品,然后在说明中进行选择,如下所示:

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

但是,这不会返回 aList<Instruction>而是 a 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();

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

4

1 回答 1

0

你所缺少的只是一个Many

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

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

于 2013-06-10T15:15:44.210 回答