2017-12-02 10 views
0

タイトルは少し混乱しますが、これを別の言い方で考えることはできませんでした。Entity Framework - 他のテーブルに一致するレコードのみを取得する場合

タイトル通り、ASP.NETアプリケーションでEntity Framework Coreを使用しています。私は(私は無関係なフィールド/プロパティを残しておきます)この質問に関連するいくつかのテーブル/モデルを持っている:

Customerテーブル:

public class Customer 
{ 
    public int ID { get; set; } 
    [MaxLength(100)] 
    public string Name { get; set; } 
} 

Menuテーブル:

public class Menu 
{ 
    public int ID { get; set; } 
    public int? ParentMenuID { get; set; } 
    [MaxLength(50)] 
    public string Name { get; set; } 
} 

public class CustomerMenu 
{ 
    public int ID { get; set; } 
    public int MenuID { get; set; } 
    public int? CustomerID { get; set; } 
} 

私の目標は標準的なメニュー構造(メニューレコードは子供/親の関係でお互いにリンクされています)ですが、顧客はCustomerMenuテーブルを介してリンクされている部分だけを見ることになります。

私の質問は、特定の顧客に関連付けられている子メニューレコードを取得する最良の方法は何ですか?

十分に簡単で、メニューの子メニューを取得する - 私はこのコードでそれを行うことができます。

var childMenus = _context.Menu.Where(m => m.ParentMenuID == id); 

しかし、私は唯一のCustomerMenu、レコードを経由して特定の顧客にリンクされているメニューのレコードを返すようにしたいです/モデル。

私の質問は、これは、手動で各メニューレコードを循環させずにチェックすることなく、1回の呼び出しで(顧客に関連付けられた子メニューレコードを取得する)顧客にリンクされていますか?

ありがとうございました。

+0

を試してみてください? – mjwills

+0

参加のためのmsdnサンプルを参照してください。https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

+0

はい、私は参加しようとしています。しかし、エンティティフレームワークで最初にコードを使用しているので、それは私が慣れていたものと少し異なります。だから、私はエンティティのフレームワーク内から参加する方法を尋ねていると思います。 – Shaggs

答えて

1

だからあなたは `2つのテーブルをjoin`したいこの

(from a in context.Menu 
       join c in context.CustomerMenu on a.ParentMenuID equals c.ID 

       select a,c).ToList(); 
+0

ありがとうございます。私はこれを撃つだろう。 – Shaggs

+0

ありがとうございます。それは私が望んでいたものとほとんど正確でした。私はメニュービットに "where"句を追加し、 "a.ID equals c.MenuID"にジョインステートメントを変更する必要があったが、それは私に後の結果を与えているようだ。 – Shaggs

関連する問題