2017-01-06 87 views
0

我有我通過ViewBag傳遞給視圖下拉列表:EF相關的數據下拉列表

ViewBag.RoomTypeID = new SelectList(db.RoomType, "ID", "Type"); 

顯然,這工作得很好,但我想要做的東西多一點複雜,我在努力找到從哪裏開始。

最終,我希望下拉列表僅顯示尚未在單獨表格中分配的房間類型(COUNT = 0)。我的模型是:

public class RoomType 
{ 
    [Key] 
    public int ID { get; set; } 

    [Display(Name = "Room Type")] 
    public string Type { get; set; } 

    public virtual ICollection<Room> Rooms { get; set; } 
} 

和...

public class Room 
{ 
    [Key] 
    public Guid ID { get; set; } 

    [Required] 
    public int PropertyID { get; set; } 

    [Required] 
    public int RoomTypeID { get; set; } 

    //other properties removed for brevity 

    public virtual RoomType RoomType { get; set; } 

    public virtual Property Property { get; set; } 
} 

假設我的財產ID是100,我只想顯示客房類型的下拉列表中,那裏是不是有屬性ID的房間100與相同的房間類型。

什麼,我試圖做的是:

ViewBag.RoomTypeID = new SelectList(db.RoomType.Where(r => r.ID = (db.Rooms.Where(r => r.PropertyID == 1))) , "ID", "Type"); 

但我想我需要轉換爲INT的名單?

謝謝,加文

回答

1

我不知道如果我理解不錯,但我認爲你只需要重構你的LINQ查詢,就像這樣:

var propertyIdNotWanted = 100; 
ViewBag.RoomTypeID = new SelectList(db.RoomType.Where(r => r.Rooms.All(room => room.PropertyID != propertyIdNotWanted)) , "ID", "Type"); 

或者你可以去翻Rooom像這個:

db.Room.Where(r => r.PropertyID != propertyIdNotWanted).Select(r => r.RoomType) 
+0

但是roomType實體不包含PropertyID?一些額外的閱讀後,它看起來像。任何人都可能會給我我所需要的 – Gavin5511

+0

我的壞@ Gavin5511我已經更新了我的答案2選擇 –

+0

選項1似乎並沒有編譯。錯誤是「方法沒有超載」哪裏有3個參數? – Gavin5511