EntityFrameworkコア選択M:N関連データ

asp.net-web-api c# entity-framework-core linq

質問

私はEF Core / Linq / Navigation Propertiesがどのように機能するかについて大きな誤解があるようです。

私は以前の質問からam:nの関係を追加して私の例を拡張しようとしました。

データベーステーブル:

  1. Person {Id(in)、Firstname(nvarchar)、Lastname(nvarchar)}
  2. グループ{Id(int)、Name(string)}
  3. GroupAssignment {Id(int)、PersonId(int)、GroupId(int)}

データベースデータ:Id 1の人がグループ1とグループ3に割り当てられます。

リンクされたGroupAssignments:


var result = from person in _dbContext.Person
            select new
            {
                id = person.Id,
                firstname = person.Firstname,
                lastname = person.Lastname,
                groupAssignments = person.GroupAssignment  
            };

return Ok(result);

しかし、私はNテーブル(グループ)のフィールドを持つリストを取得したい。私が探している結果は


[
{
    "id": 1,
    "firstname": "First1",
    "lastname": "Last1",
    "groupAssignments": 
    [
         {
         "id": 1,
         "name": "test group 1"
         },
         {
         "id": 3,
         "name": "test group 3"
        }
    ]
}
]

ところで、あなたがコメントにEF(コア)とlinqに関する良い読書リンクを投稿すれば、本当にうれしいでしょう。私は初心者の問題がたくさんあるようです。

受け入れられた回答

GroupAssigmentエンティティにGroupナビゲーションプロパティがあるとします。その場合は、拡張メソッドをSelect使用します:

var result = from person in _dbContext.Person
            select new
            {
                id = person.Id,
                firstname = person.Firstname,
                lastname = person.Lastname,
                groupAssignments= person.GroupAssignment.Select(ga=>ga.Group)  
            };

return Ok(result);

ドキュメントについては、 ここから開始できます

更新

以下にコメントした内容を達成するには、 匿名タイプを使用して2つのプロパティのみを投影します。

groupAssignments= person.GroupAssignment.Select(ga=>new{id=ga.Group.Id,name=ga.Group.Name}) 


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ