我有两张桌子。
作者表--- AuthID PK
合约表--- AuthID FK
我想限制合同视图"作者姓名"没有合同的作者的框。
我认为我可以使用更多代码来完成它,但我觉得有一种方法可以通过一个简单的查询来实现它,我只是错过了它。
这是我的代码:
public ActionResult Create()
{
var contract = new Contract();
var allAuthors = db.Authors.Select(a => a.AuthID);
var unusedAuthors = new List<Author>();
foreach (var auth in allAuthors) {
unusedAuthors = db.Contracts
.Where(a => a.AuthID.GetHashCode() != auth.GetHashCode())
.Select(a => a.Author).ToList();
}
ViewBag.AuthID = new SelectList(unusedAuthors, "AuthID", "AuthFirstName");
return View(contract);
}
答案 0 :(得分:2)
你可以试试这个:
var unusedAuthors =
(from a in db.Authors
join c in db.Contracts on a.AuthID equals c.AuthID into lrs
from lr in lrs.DefaultIfEmpty()
where lr ==null
select a).ToList() ;
答案 1 :(得分:2)
你可以这样做
var allAuthors = db.Authors.Select(a => a.AuthID).ToList();
var unusedAuthors = db.Contracts
.Where(x => !(allAuthors.Contains(x.AuthID)))
.Select(a => a.Author)
.ToList();
无需使用foreach