0

User、Product、Instruction の 3 つのテーブルがあります。User と Product の間には多対多の関係があり、Product と Instruction の間にも多対多の関係があります。

特定のユーザーが見ることを許可されているすべての指示を取得する必要があります。つまり、ユーザーに接続されているすべての製品のすべての指示です。

メソッド構文を使用し、ナビゲーション プロパティを利用して結合を回避したいと考えています。したがって、最初にユーザーの製品を取得してから、次のように指示を選択します。

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

List<Instruction>ただし、これは aではなく 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 に答える