EntityFramework Core選擇M:N相關數據

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

我似乎對EF Core / Linq / Navigation Properties的工作原理有很大的誤解。

我試圖從上一個問題擴展我的例子,添加am:n關係。

數據庫表:

  1. 人{Id(in),名字(nvarchar),姓氏(nvarchar)}
  2. 組{Id(int),名稱(字符串)}
  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);

關於文檔,您可以從這裡開始。

更新

要實現下面評論的內容,您可以使用匿名類型僅投影這兩個屬性:

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


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow