2017-04-22 23 views
3

私は2つのテーブルを持っています。2つのテーブルのIDを比較するASP.Net MVC

著者の表--- 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

あなたはこれを試すことができます。

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() ; 
+0

私のため申し訳ありませんを使用する必要を行うことはできません間違い。私は自分の答えを更新する。 – Ashiquzzaman

+0

これは素晴らしいです!あなたのお返事ありがとうございます! – ReRoute

1

あなたはこの

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

+0

ありがとうございます - これはうまくいくようです – ReRoute

関連する問題