1

私はこれらのクラスの形で2つのテーブルを持っています

public class Movie
{
    private int MovieID;
    private string Title;
}
public class transactions
{
    private int TransactionID;
    private int MovieID;

}

したがって、最初のテーブルにはすべての映画が含まれ、2番目のテーブルにはレンタルされた映画が含まれます

ストアに残っている、つまりレンタルされておらず、利用可能なすべての映画を選択するにはどうすればよいですか。次のように落ち着かせてみました:

var moviesavailable =
  (from m in db.Movies 
  select m.MovieID ).Intersect
  (from trans in db.Transactions 
  select trans.MovieID)

しかし、動作していません...

4

1 に答える 1

7

それを行う最初の方法は、すべての映画を調べ、同じMovieIDのトランザクションがない場合は各ルックを確認することです。

db.Movies.Where(m => !db.Transactions.Any(t => t.MovieID == m.MovieID))

2番目の方法は、左結合を作成することです。Moviesのすべての行と、Transactionsの同等の行を結合します。ムービーの行のトランザクションに行がない場合、この行のトランザクションはnull(DefaultIfEmpty)です。

from m in db.Movies
join t in db.Transactions on m.MovieID equals t.MovieID into g
from t in g.DefaultIfEmpty()
where t == null
select m.MovieID
于 2012-09-12T11:49:07.233 に答える