2016-07-05 83 views
0

每個building有多個rooms。我想從一個building包括從每一個room所擁有的房間號時返回的數據說,通過類buildingView,它看起來像這樣現在(有一些僞代碼)building通過實體框架向類添加相關表字段

public class buildingView 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    ... 
    public *something* roomNumbers *something* 
} 

爲此,我有以下查詢:

buildingView building = db.buildings.Select(b => new buildingView 
{ 
    id = b.id, 
    name = b.name, 
    ... 
    roomNumbers = *I have no idea* 
}) 
.Where(b => b.id == id) 
.SingleOrDefault(); 

房間號碼都是字符串,如果這是相關的。

我的問題:

怎樣才能讓我的房間號碼的名單?

如何改善我的問題標題?我現在缺乏詞彙來做得更好。

完全有另一種方式嗎?

謝謝!

P.S.如果你打算冷靜下來,請說明原因。否則,我將如何知道如何改進我的問題?

+1

看看[Entity Framework:Querying Child Entities]的接受答案(http://stackoverflow.com/questions/7753039/entity-framework-querying-child-entities)。鑑於他們正在根據年齡尋找,您可以使用您定義的任何標準來匹配要構建的房間(例如BuildingId)。如果您需要更多的幫助,請將「建築」和「房間」課程添加到問題中。 – Tone

+0

OP:如果沒有Entity Framework,你會怎麼做?這樣寫,讓EF找出其餘的。這是EF的目的。 – Spivonious

回答

1

假設你有一個類像...

class Building 
{ 
    ... 
    public ICollection<Room> Rooms { get; set; } 
} 

BuildingView是...

public class BuildingView 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    ... 
    public IEnumerable<string> RoomNumbers { get; set; } 
} 

...你可以級聯房間號碼如下:

var buildingViews = context.Buildings 
          .Select(b => new BuildingView 
          { 
           Id = b.Id, 
           Nems = b.Name, 
           RoomNumbers = b.Rooms 
               .Select(r => r.Number) 
          }); 

備註:真的推薦使用C#命名約定,如PascalCase for class和p屬性名稱。

+0

這很好用。謝謝。 – crowhill