我有以下类结构,
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;
}
}
现在使用EF,
var dbContext.Class1
.Include(x=>x.Class2)
where (x=>x.Meta.Active)
现在我想使用上面的查询来加载/过滤/获取所有活动的class2实体。
我尝试过应用过滤器 .Include(x =&gt; x.Class2).Where(y =&gt; y.Meta.Active)
但它仅适用于Class1。我想过滤所有活动的class2实体。
请帮忙。 在此先感谢。
答案 0 :(得分:0)
要过滤导航属性集合,您可以使用方法Query。它看起来像这样:
context.Entry(blog)
.Collection(b => b.Posts)
.Query()
.Where(p => p.Tags.Contains("entity-framework")
.Load();
或者您可以执行以下操作:
dbContext.Class1
.Select(s => new {class1 = s, navigationProps = s.Class2s.Where(w => w.Meta.Active)})
.AsEnumerable()
.Select(s => s.class1);