EF相关数据下拉列表
EF related data dropdown list
我有一个下拉列表,我通过 ViewBag 将其传递给视图:
ViewBag.RoomTypeID = new SelectList(db.RoomType, "ID", "Type");
这显然工作正常,但我想做一些更复杂的事情,并且正在努力寻找从哪里开始。
最终,我希望下拉列表在单独的 table 中仅显示尚未分配 (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 列表?
我不知道我是否理解得很好,但我认为你只需要像这样重构你的 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)
我有一个下拉列表,我通过 ViewBag 将其传递给视图:
ViewBag.RoomTypeID = new SelectList(db.RoomType, "ID", "Type");
这显然工作正常,但我想做一些更复杂的事情,并且正在努力寻找从哪里开始。
最终,我希望下拉列表在单独的 table 中仅显示尚未分配 (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 列表?
我不知道我是否理解得很好,但我认为你只需要像这样重构你的 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)