比较两个表ASP.Net MVC的ID

时间:2017-04-22 01:13:54

标签: c# asp.net-mvc entity-framework

我有两张桌子。

作者表--- 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);
    }

2 个答案:

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