检查查询是否包含列表中的内容

时间:2012-11-28 20:31:48

标签: c# asp.net sql linq linq-to-sql

作为查询的结果,我希望让所有不在列表中的董事在List中与董事一起发送。但我不知道如何解决这个问题。我已经尝试使用Contains和其他一些东西。

根本不知道怎么做。

public List<MovieDirector> GetDirectorsPossibleForMovie(int MovieID, List<Director> director)
{
    List<MovieDirector> directors =
    (from item in db.MovieDirectors where item.MovieId != MovieID && item.Director != director orderby item.Director.Lastname select item).ToList<MovieDirector>();
    return directors;
}

其他信息:数据库MovieDirectorMovie已关联,但也MovieDirectorDirector

谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个:

public List<MovieDirector> GetDirectorsPossibleForMovie(
    int MovieID, List<Director> director)
{
    var mds = db.MovieDirectors.Where(x => x.MovieId != MovieID).ToList();
    mds = mds.Where(x => !director.Contains(x.Director)).ToList();
    return mds;
}

答案 1 :(得分:1)

如果MovieDirector类的哈希码和equals方法设置正确,@ Enigmativity的答案可能会有效,但它会从数据库中提取几乎所有的MovieDirector对象,只会丢弃与列表中的控制器关联的对象。

假设你有一个主键DirectorId来区分一个导演与另一个导演,你应该可以做这样的事情来产生一个SQL查询,它将首先排除指定的导演:

var directorIds = director.Select(d => d.DirectorId);
var mds = db.MovieDirectors.Where(x => x.MovieId != MovieID && 
                                       !directorIds.Contains(x.DirectorId))
          .ToList();
return mds;