【发布时间】:2015-10-13 04:54:59
【问题描述】:
我有以下类结构,
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=>x.Class2).Where(y=>y.Meta.Active)
但它仅适用于 Class1。我想过滤所有活动的 class2 实体。
请帮忙。 提前致谢。
【问题讨论】:
-
.Include(x=>x.Class2) (我认为您的意思是 Class2s)将返回一个 IQueryable
。所以在你的 where 调用中,你必须再次导航到第 2 类 .Include(x=>x.Class2s).Where(x=>x.Class2s.Any(y=>y.Meta.Active)) -
不,那是行不通的。它不会过滤 class2
标签: c# entity-framework linq-to-entities