6

在我的 Context 文件中,我在 Location 类和 Program 类之间建立了多对多关系。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {

            modelBuilder.Entity<Location>()
            .HasMany(u => u.Programs)
            .WithMany(r => r.Locations)
            .Map(m =>
            {
                m.ToTable("LocationsPrograms");
                m.MapLeftKey("LocationId");
                m.MapRightKey("ProgramId");
            });

        }

我正在创建一个搜索/过滤表单,用户需要能够通过选择一个程序来过滤位置。

我的想法是查询联结 (M2M) 表,然后将其与位置表连接起来。

问题是除了我的 OnModelCreating 方法之外,我没有代表 M2M 表的类。

我可以举个例子来说明如何做到这一点吗?

基本上 select * from locations l join locationsprograms lp on l.LocationId = lp.locationid 和 lp.programid = 传入的任何内容。

谢谢你。

4

1 回答 1

7
var locations = dbContext.Locations
    .Where(l => l.Programs.Any(p => p.ProgramId == whateverWasPassedInId))
    .ToList();

或者(因为您正在按的主键属性过滤Program):

var locations = dbContext.Programs
    .Where(p => p.ProgramId == whateverWasPassedInId)
    .Select(p => p.Locations)
    .SingleOrDefault();
于 2012-05-29T17:32:12.237 回答