0

我在 MVC4 应用程序中有以下内容。我想通过两个键过滤负载,可能有很多对很多,但是两个键一起代表一个唯一的行。目标是仅在需要时显式加载这些集合并由关系的双方进行过滤。

我有以下 Entity.DBContext,它适用但仅适用于 UserId 键。

context.UserProfiles.Include(o => o.CoachOfOrginizations).Where(p => p.UserId == UserId).Single()

这也会加载所有这些,但当然根本不会过滤,只是向您展示,以便您知道我正确设置了流利的代码。

    context.Entry(this).Collection(t => t.AdministratorOfOrginizations).Load();

modelBuilder.Entity<UserProfile>()
                .HasMany(p => p.CoachOfOrginizations)
                .WithMany(t => t.Coaches)
                .Map(mc =>
                {
                    mc.ToTable("OrganizationCoaches");
                    mc.MapLeftKey("UserProfileID");
                    mc.MapRightKey("OrganizationID");
                });

CoachOfOrginizations 是 UserProfile 上的以下属性。

public ICollection<Organization> CoachOfOrginizations { get; set; }

我想要的是根据Organization.ID(另一个键)和当前使用的键p.UserId过滤我原来的.Include。我尝试了以下方法,但它不起作用,有什么建议吗?“this”是 UserProfile 对象。

context.Entry(this)
                .Collection(b => b.CoachOfOrginizations)
                .Query()
                .Where(p => p.ID == orgID)
                .Load();
4

1 回答 1

1

您可以在单个查询中进行这两种过滤。请参阅条件包含

var query = context.UserProfiles
             .Where(p => p.UserId == UserId)
             .Select(p => new { p, Orgs = p.CoachOfOrginizations.Where(o => o.ID == orgID) });

var profiles = query.AsEnumerable().Select(a => a.p);
于 2012-09-22T01:36:03.413 回答