简体   繁体   English

使用实体框架过滤内部/级联实体

[英]Filter Internal/cascading entities using Entity Framework

I have below class structure, 我有下面的课程结构,

public partial class Class1 : BaseEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [Required]
    [StringLength(100)]
    public string Name { get; set; }

    [Required]
    [StringLength(500)]
    public string Description { get; set; }
    public virtual ICollection<Class2> Class2s  { get; set; }

}


public partial class Class2 : BaseEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }

    [Required]
    [StringLength(100)]
    public string Name { get; set; }

    [StringLength(500)]
    public string Description { get; set; }

    [Required]
    [ForeignKey("Class1")]
    public Guid Class1_Id  { get; set; }
    public virtual Class1 Class1 { get; set; }
}

public class BaseEntity
{
    public BaseEntity()
    {
        Meta = new MetaData();
    }
    public MetaData Meta  { get; set; }
}

public sealed class MetaData
{
    public bool Active { get; set; }
    public DateTimeOffset Created { get; set; }
    public DateTimeOffset? Modified { get; set; }

    public MetaData()
    {
        Created = DateTime.UtcNow;
        Active = true;
    }
}

Now using EF, 现在使用EF

var dbContext.Class1
.Include(x=>x.Class2)
where (x=>x.Meta.Active)

Now I want to load/filter/get all active class2 entities using above query. 现在,我想使用上述查询来加载/过滤/获取所有活动的class2实体。

I have tried to apply filter on .Include(x=>x.Class2).Where(y=>y.Meta.Active) 我试图在.include(x => x.Class2).Where(y => y.Meta.Active)上应用过滤器

but it apply only on Class1. 但它仅适用于Class1。 I want to filter all active class2 entities. 我想过滤所有活动的class2实体。

Please help. 请帮忙。 Thanks in Advance. 提前致谢。

To filter navigation property collection you can use method Query . 要过滤导航属性集合,可以使用Query方法。 It looks like this: 看起来像这样:

context.Entry(blog) 
    .Collection(b => b.Posts) 
    .Query() 
    .Where(p => p.Tags.Contains("entity-framework") 
    .Load();

Or you can do the following: 或者,您可以执行以下操作:

dbContext.Class1
    .Select(s => new {class1 = s, navigationProps = s.Class2s.Where(w => w.Meta.Active)})
    .AsEnumerable()
    .Select(s => s.class1);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM