EF相关数据下拉列表

时间:2017-01-06 11:01:38

标签: asp.net asp.net-mvc entity-framework linq linq-to-entities

我有一个下拉列表,我通过ViewBag传递给视图:

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

这显然工作正常,但我想做一些更复杂的事情,并且很难找到从哪里开始。

最终,我希望下拉列表仅显示尚未在单独的表中分配(COUNT = 0)的RoomTypes。我的模特是:

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 个答案:

答案 0 :(得分:2)

我不知道我是否理解得很好,但我认为你只需要重构你的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)