【问题标题】:How do you select the parent(s) based on child properties?您如何根据子属性选择父级?
【发布时间】:2021-07-18 22:51:05
【问题描述】:

我的父母(电影)上有子集合(演员),我如何选择所有有演员 A 和演员 B 甚至演员 C 等的电影......?我可以管理一个简单的查询来查找所有演员 A 电影等……但做 (n) 演员似乎不清楚。我的模型如下:

    public class Movie
    {
        public int MovieID { get; set; }

        public string MovieTitle { get; set; }
        
        public ICollection<MovieActor> MovieActors { get; set; }
    }

public class MovieActor
    {
        public int MovieID { get; set; }
        public Movie Movie { get; set; }

        public int ActorID { get; set; }
        public Actor Actor { get; set; }
    }

 public class Actor
    {
        public int ActorID { get; set; }
        [DisplayName("First Name")]
        public string ActorFirstname { get; set; }

        [DisplayName("Last Name")]
        public string ActorLastname { get; set; }

        public ICollection<MovieActor> MovieActors { get; set; }
        
    }

我对该对象的 dbContext 配置如下所示:

public void Configure(EntityTypeBuilder<MovieActor> builder)
        {
            builder.HasKey(ma => new { ma.MovieID, ma.ActorID });
            builder.HasOne(ma => ma.Movie)
                .WithMany(m => m.MovieActors)
                .HasForeignKey(ma => ma.MovieID);
            builder.HasOne(ma => ma.Actor)
                .WithMany(a => a.MovieActors)
                .HasForeignKey(ma => ma.ActorID);
        }

【问题讨论】:

标签: ef-core-3.1


【解决方案1】:

假设您想要在同一部电影中有指定演员的电影,您可以这样做。

    private List<Movie> GetMovies(params int[] actorIds)
    {
        IQueryable<Movie> movies = dc.Movies;

        foreach (int actorId in actorIds)
        {
            movies = movies.Where(w => w.MovieActors.Any(a => a.ActorId == actorId));
        }

        return movies.ToList();
    }

或者,如果您想要这些演员中的任何一个出演过的所有电影

     return dc
            .MovieActors
            .Where(w => actorIds.Contains(w.ActorId))
            .Select(s => s.Movie)
            .Distinct()
            .ToList();

有很多方法可以访问数据,并不是说这些是最好的性能,但它们确实为您提供了选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多