我有一个展览场景。
如何从我将在参展商视图中显示的下拉列表中排除下面的可用展位列表。
在 Sql 中,我会:
Select StandID, Description from Stand
Where StandID not in (Select StandID from Exhibitor)
参展商注册 - 并根据以下型号从下拉列表(StandID/Stand)中选择他们想要的展位:
public class Exhibitor
{
public int ExhibitorID { get; set; }
public string CompanyName { get; set; }
public string ContactName { get; set; }
public int StandID { get; set; }
public virtual Stand Stand { get; set; }
}
展台型号如下:
public class Stand
{
public int StandID { get; set; }
public string Description { get; set; }
public bool Booked { get; set; }
}
我可以得到一个 Stands 列表,如下所示:
var stands = db.Stands.ToList().Where(s => s.Booked==false)
.Select(s => new SelectListItem
{
Value = s.StandID.ToString(),
Text = s.StandNumber + ": " + s.Description + ": " + s.Size + ": £" + s.Rate.ToString()
});
但是如何从展位列表中排除(从参展商中选择展位 ID)?
我试过:
var booked = db.Exhibitors.Select(s => new { s.StandID }).ToList();
然后使用:
var stands = db.Stands.ToList().Where(s => s.Booked==false)
.Except(booked)
.Select(s => new SelectListItem
{
Value = s.StandID.ToString(),
Text = s.StandNumber + ": " + s.Description + ": " + s.Size + ": £" + s.Rate.ToString()
});
但这没有用。
更新
这似乎可行 - 但我不是专家,所以如果它是最佳实践方式,我会很感激任何建议?
var stands = db.Stands.ToList().Where(s => !db.Exhibitors
.Any(bk => bk.StandID == s.StandID) && s.Booked == false)
.Select(s => new SelectListItem
{
Value = s.StandID.ToString(),
Text = s.StandNumber + ": " + s.Description + ": " + s.Size + ": £" + s.Rate.ToString()
});
谢谢你的帮助?
标记